Ngăn chặn Nix nâng cấp git lên git-full


8

Tôi đang sử dụng Nix trên Ubuntu để có các phiên bản hiện đại hơn của một số gói, một trong số đó là git. Khi tôi chạy nix-env -u, đây là những gì xảy ra:

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

Đây không phải là điều tôi muốn - tôi thích phiên bản đơn giản git-1.9.0hơn -fullphiên bản. Tôi biết tôi có thể tự nâng cấp lên phiên bản đơn giản với nix-env -i git-1.9.0, nhưng có cách nào để thực nix-env -uhiện những gì tôi muốn không?

Câu trả lời:


4

Trước khi tôi đi và trả lời câu hỏi này, tôi muốn giải thích cách đặt tên của các gói hoạt động trong Nix.

Tên bạn đang đề cập là tên phái sinh, không phải là duy nhất (nhiều gói được biên dịch theo nhiều cách khác nhau git-1.9.0).

Nếu bạn muốn tham chiếu một gói theo cách duy nhất, tên tập thuộc tính là cách.

Để in tên bộ thuộc tính trong khi truy vấn (lưu ý -P:

nix-env -qaP | grep git

Để cập nhật một gói theo tên duy nhất:

nix-env -uA git

Trong trường hợp của bạn, đây là kết quả của thực tế là cả hai gói được gọi git-version. Nix giải quyết cái nào được chọn theo mức độ ưu tiên. Để giảm mức độ ưu tiên cho một dòng điện, hãy đặt:

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

1
Dựa trên cuộc thảo luận của IRC: --set-flag prioritykhông thực sự có ích ở đây và có thể thay đổi quy ước đặt tên của các biến thể gói trong Nixpkgs: github.com/NixOS/nixpkgs/issues/1756
Miikka

3
Xem github.com/NixOS/nixpkgs/issues/1756#issuecomment-37316142 , điều này đã được sửa.
iElectric
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.