我创建了自己的存储库以获取一些git源。
# packages.nix
with (import <nixpkgs> {});
rec {
rustcSource = fetchgit {
url = https://github.com/rust-lang/rust;
rev = "3191fbae9da539442351f883bdabcad0d72efcb6";
sha256 = "0w1l14kz9kxyj5dw3w9xxk1fzww5xqs3sf8saay0mh7nkmvrdb59";
};
}
Run Code Online (Sandbox Code Playgroud)
然后我建立rustcSource,
sudo nix-env -f package.nix -A rustcSource
Run Code Online (Sandbox Code Playgroud)
揭示了的存储路径/nix/store/096fpy9qjbz5r14aadjnq9d2md9ql9cg-rust-3191fba。问题是,我忘了下载它的子模块,所以我将表达式更改为包括子模块,
with (import <nixpkgs> {});
rec {
rustcSource = fetchgit {
url = https://github.com/rust-lang/rust;
rev = "3191fbae9da539442351f883bdabcad0d72efcb6";
sha256 = "0w1l14kz9kxyj5dw3w9xxk1fzww5xqs3sf8saay0mh7nkmvrdb59";
leaveDotGit = true;
fetchSubmodules = true;
};
}
Run Code Online (Sandbox Code Playgroud)
但是,我发现nix-build它不会重新计算哈希值,并且看到路径已构建。因此,最终不下载子模块。
问:是尼克斯虫吗?如何“重建”或重新下载存储库?
PS实际上,我在其中创建了一个带有fetchgit的派生类,但由于未下载子模块而失败了。因此,以上情况简化了我的问题。