Empêcher Nix de mettre à niveau git vers git-full

8

J'utilise Nix sur Ubuntu pour avoir des versions plus modernes de certains packages, l'un d'eux étant git. Quand je cours nix-env -u, c'est ce qui se passe:

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

Ce n'est pas ce que je veux - je préfère la version simple git-1.9.0à la -fullversion. Je sais que je peux passer manuellement à la version standard avec nix-env -i git-1.9.0, mais existe-t-il un moyen de faire nix-env -uce que je veux?

Miikka
la source

Réponses:

4

Avant de répondre à celle-ci, je voudrais expliquer comment le nommage des packages fonctionne dans Nix.

Le nom auquel vous faites référence est un nom de dérivation, qui n'est pas unique (plusieurs packages compilés de différentes manières peuvent l'être git-1.9.0).

Si vous souhaitez référencer un package de manière unique, le nom du jeu d'attributs est le chemin.

Pour imprimer le nom du jeu d'attributs pendant la requête (remarque -P:

nix-env -qaP | grep git

Pour mettre à jour un package par un nom unique:

nix-env -uA git

Dans votre cas, cela est dû au fait que les deux packages sont appelés git-version. Nix décide lequel est choisi par priorité. Pour réduire la priorité de celui en cours, définissez:

nix-env --set-flag priority 10 git
nix-env -u
iElectric
la source
1
Basé sur la discussion IRC: --set-flag priorityn'aide pas vraiment ici, et il pourrait être logique de changer la convention de dénomination des variantes de package dans Nixpkgs: github.com/NixOS/nixpkgs/issues/1756
Miikka
3
Voir github.com/NixOS/nixpkgs/issues/1756#issuecomment-37316142 , cela a été corrigé.
iElectric