Cập nhật chỉ một viên ngọc với gói


233

Tôi sử dụng gói để quản lý các phụ thuộc trong ứng dụng rails của mình và tôi có một viên ngọc được lưu trữ trong kho git bao gồm như sau:

gem 'gem-name', :git => 'path/to/my/gem.git'

Để cập nhật viên ngọc này, tôi thực thi bundle updatenhưng nó cũng cập nhật tất cả các viên đá quý được đề cập trong Gemfile. Vì vậy, lệnh để cập nhật chỉ một viên ngọc cụ thể là gì?

Câu trả lời:


354

Ở đây bạn có thể tìm thấy một lời giải thích tốt về sự khác biệt giữa

Cập nhật cả đá quý và phụ thuộc:

bundle update gem-name 

hoặc là

Cập nhật độc quyền đá quý:

bundle update --source gem-name

cùng với một số ví dụ hay về tác dụng phụ có thể xảy ra.

Cập nhật

Như câu trả lời của @ Tim nói, kể từ Bundler 1.14, cách được hỗ trợ chính thức cho vấn đề này là với bundle update --conservative gem-name.


19
Hãy cẩn thận, "cập nhật đá quý và phụ thuộc" có nghĩa là tự cập nhật đường ray nếu đó là phụ thuộc và bạn có thể không muốn điều đó. --source sẽ chỉ cập nhật đá quý được chỉ định làm tham số. Vì vậy, nó là tốt hơn trong hầu hết các tình huống.
1,44mb

Làm thế nào để xác định phiên bản?
O Sơn Wisumperuma

1
@OshanWisumperuma Chỉ định phiên bản trong Gemfile hoặc có thể là Gemfile.lock trước khi chạy các lệnh gói này
Harry Wood

185

Cách để làm điều này là chạy lệnh sau:

bundle update --source gem-name

3
Đây chính xác là những gì tôi cần, tôi có một viên ngọc riêng và chỉ cần tự cập nhật đá quý mà không cập nhật các phụ thuộc sau khi tôi thực hiện một số thay đổi đối với đá quý riêng.
Tôi là một con rồng ếch

30

Dường như với các phiên bản mới hơn của trình đóng gói (> = 1.14), đó là:

bundle update --conservative gem-name

lưu ý: lệnh này sẽ cập nhật một viên ngọc mà không phụ thuộc vào nó
mmike

24

Bạn chỉ cần chỉ định tên đá quý trên dòng lệnh:

bundle update gem-name

1
Lạ thật. Đó là những gì bundle help updatenói để làm. Phiên bản nào của bundler bạn đang sử dụng?
Brandan

40
bundle update gem-namesẽ cập nhật đá quý và "bất kỳ phụ thuộc nào của nó".
yaka

5

bundle update gem-name [--major|--patch|--minor]

Điều này cũng làm việc cho các phụ thuộc.


1
Có cách nào để cập nhật nó lên một phiên bản cụ thể không? Các --major, --minor--patchcờ tự động nâng cấp nó lên phiên bản mới nhất có thể.
user2490003

2

Tôi đã sử dụng bundle update --sourcebản thân mình trong một thời gian dài nhưng có những kịch bản mà nó không hoạt động. May mắn thay, có một viên đá quý được gọi là bundler-patchcó mục tiêu khắc phục nhược điểm này.

Tôi cũng đã viết một bài đăng blog ngắn về cách sử dụng bundler-patchvà tại sao bundle update --sourcekhông hoạt động ổn định. Ngoài ra, hãy chắc chắn kiểm tra một bài đăng của chrismo giải thích rất chi tiết những gì --sourcetùy chọn này làm.


0

bundler update --source gem-name sẽ cập nhật hàm băm sửa đổi trong Gemfile.lock mà bạn có thể so sánh với hàm băm cam kết cuối cùng của nhánh git đó (theo mặc định).

GIT remote: git@github.com:organization/repo-name.git revision: c810f4a29547b60ca8106b7a6b9a9532c392c954

có thể được tìm thấy tại github.com/organization/repo-name/commits/c810f4a2(Tôi đã sử dụng hàm băm cam kết 8 ký tự cho url)

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.