Verhindern, dass Nix git auf git-full aktualisiert


8

Ich verwende Nix unter Ubuntu, um modernere Versionen einiger Pakete zu haben, von denen eines Git ist. Wenn ich renne nix-env -u, passiert Folgendes:

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

Dies ist nicht das, was ich will - ich bevorzuge die einfache Version git-1.9.0gegenüber der -fullVersion. Ich weiß, dass ich manuell auf die einfache Version aktualisieren kann nix-env -i git-1.9.0, aber gibt es eine Möglichkeit, das nix-env -uzu tun, was ich will?

Antworten:


4

Bevor ich diese Frage beantworte, möchte ich erklären, wie die Benennung von Paketen in Nix funktioniert.

Der Name, auf den Sie sich beziehen, ist ein Ableitungsname, der nicht eindeutig ist (mehrere Pakete, die auf unterschiedliche Weise kompiliert wurden, können sein git-1.9.0).

Wenn Sie ein Paket auf eindeutige Weise referenzieren möchten, ist der Name des Attributsatzes der richtige Weg.

So drucken Sie den Namen des Attributsatzes während der Abfrage aus (Hinweis -P:

nix-env -qaP | grep git

So aktualisieren Sie ein Paket mit einem eindeutigen Namen:

nix-env -uA git

In Ihrem Fall ist dies darauf zurückzuführen, dass beide Pakete aufgerufen werden git-version. Nix entscheidet, welches nach Priorität aufgenommen wird. Um die Priorität für die eine aktuelle zu verringern, setzen Sie:

nix-env --set-flag priority 10 git
nix-env -u

1
Basierend auf der IRC-Diskussion: --set-flag priorityHilft hier nicht wirklich, und es könnte sinnvoll sein, die Namenskonvention der Paketvarianten in Nixpkgs zu ändern: github.com/NixOS/nixpkgs/issues/1756
Miikka

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.