【发布时间】:2017-05-20 02:20:18
【问题描述】:
我创建自己的存储库来获取一些 git 源代码。
# packages.nix
with (import <nixpkgs> {});
rec {
rustcSource = fetchgit {
url = https://github.com/rust-lang/rust;
rev = "3191fbae9da539442351f883bdabcad0d72efcb6";
sha256 = "0w1l14kz9kxyj5dw3w9xxk1fzww5xqs3sf8saay0mh7nkmvrdb59";
};
}
然后我构建rustcSource,
sudo nix-env -f package.nix -A rustcSource
它显示了/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;
};
}
但是,我发现nix-build 并没有重新计算哈希值并看到路径已经建立。因此,它最终不会下载子模块。
问:是 nix 错误吗?如何“重建”或重新下载存储库?
附:实际上我在其中创建了一个带有 fetchgit 的派生,但它失败了,因为没有下载子模块。所以,上面的案例简化了我的问题。
【问题讨论】: