防止 Nix 将 git 升级到 git-full

Mii*_*kka 8 upgrade package-management nixpkgs nix

我在 Ubuntu 上使用Nix来获得一些软件包的更现代版本,其中之一是 git。当我运行时nix-env -u,会发生以下情况:

% nix-env -u --dry-run '*'
(dry run; not doing anything)
upgrading `git-1.8.5.4' to `git-1.9.0-full'
Run Code Online (Sandbox Code Playgroud)

这不是我想要的 - 我更喜欢普通版本git-1.9.0而不是-full版本。我知道我可以使用 手动升级到普通版本nix-env -i git-1.9.0,但是有没有办法nix-env -u做我想做的事?

iEl*_*ric 4

在回答这个问题之前,我想解释一下 Nix 中包的命名是如何工作的。

您所指的名称是派生名称,它不是唯一的(以不同方式编译的多个包也可以git-1.9.0)。

如果你想以唯一的方式引用一个包,属性集名称就是这样的方式。

查询时打印属性集名称(注意-P

nix-env -qaP | grep git
Run Code Online (Sandbox Code Playgroud)

要通过唯一名称更新包:

nix-env -uA git
Run Code Online (Sandbox Code Playgroud)

就您而言,这是由于两个包都被称为git-version. Nix 决定按优先级选择哪一个。要降低当前一项的优先级,请设置:

nix-env --set-flag priority 10 git
nix-env -u
Run Code Online (Sandbox Code Playgroud)

  • 请参阅 https://github.com/NixOS/nixpkgs/issues/1756#issuecomment-37316142,此问题已修复。 (3认同)