Запрет Nix от обновления git до git-full

8

Я использую Nix в Ubuntu, чтобы иметь более современные версии некоторых пакетов, одним из которых является 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'

Это не то, что я хочу - я предпочитаю простую версию git-1.9.0над -fullверсией. Я знаю, что могу вручную обновиться до простой версии nix-env -i git-1.9.0, но есть ли способ заставить nix-env -uделать то, что я хочу?

Микка
источник

Ответы:

4

Прежде чем я пойду и отвечу на этот вопрос, я хотел бы объяснить, как работает именование пакетов в Nix.

Имя, на которое вы ссылаетесь, является именем деривации, которое не является уникальным (может быть несколько пакетов, скомпилированных по-разному git-1.9.0).

Если вы хотите ссылаться на пакет уникальным способом, лучше использовать имя набора атрибутов.

Чтобы распечатать имя набора атрибутов во время запроса (примечание -P:

nix-env -qaP | grep git

Чтобы обновить пакет с уникальным именем:

nix-env -uA git

В вашем случае это результат того, что оба пакета вызываются git-version. Nix решает, какой из них выбран по приоритету. Чтобы снизить приоритет для одного текущего, установите:

nix-env --set-flag priority 10 git
nix-env -u
iElectric
источник
1
Основано на обсуждении IRC: --set-flag priorityздесь на самом деле не помогает, и, возможно, имеет смысл изменить соглашение об именах вариантов пакетов в Nixpkgs: github.com/NixOS/nixpkgs/issues/1756
Miikka
3
См. Github.com/NixOS/nixpkgs/issues/1756#issuecomment-37316142 , это было исправлено.
iElectric