gpt4 book ai didi

nix - 如何再次构建存储路径 `nix-build`?

转载 作者:行者123 更新时间:2023-12-04 14:09:30 26 4
gpt4 key购买 nike

我创建了自己的存储库来获取一些 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 bug吗?如何“重建”或重新下载存储库?

附言实际上我在其中创建了一个带有 fetchgit 的派生,但它失败了,因为没有下载子模块。因此,上述情况简化了我的问题。

最佳答案

不是错误,这是设计使然。

指定散列的派生称为固定输出派生,它们仅检查散列是否与存储中的任何现有派生匹配并使用它。因此,您的 fetchSubmodules 更改将被忽略。

更多讨论见https://github.com/NixOS/nix/issues/969

关于nix - 如何再次构建存储路径 `nix-build`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41486747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com