簡體   English   中英

捆綁器何時更新寶石指向git repo的寶石?

[英]When do bundler update the gem incase of gems pointed to git repo?

我試圖將3 Rails應用程序的常用功能移動到gem中。 我創建了gem,在本地測試它,並將移動到私有存儲庫。

所以,現在我擔心如果我在gem中的代碼有變化,如何處理大小寫。 我是否需要更改gem的版本,如果我想在bundle update mygembundle update mygem ,或者Bundler會在執行bundle update mygem檢測git repo的提交哈希值的變化?

由於您的Gemfile將在私有git存儲庫中引用您的gem,因此為了讓您的應用程序獲取gem中的任何新更改,您需要執行bundle update gemname 純粹而簡單。 如果您不這樣做,bundle將不會接收更改。

Bundler使用鎖定在Gemfile.lock文件中的gem版本,以便在您的應用程序中啟動/使用它。 只有Gemfile.lock bundle update才會更新Gemfile.lock的版本信息。 否則它被鎖定 (也就是Gemfile.lock )並且正在使用任何被鎖定的版本。

BTW,引用私有git存儲庫中的gem可以有很多選項( :branch:tag等),但這是無關緊要的。 鎖定將發生在什么地方。

我希望這個解釋捆綁器如何工作。

每次對其進行更改時,都無需更改gem內的版本。 使用git gems時, Gemfile.lock鎖定提交哈希而不是版本號。 您根本不需要指定版本。

當你運行bundle update mygem並且mygem是一個git gem時,它會將鎖定的提交哈希更新為你指定的分支上的最新可用(如果你沒有指定分支,則更新為master )。

好問題,我認為當你運行bundle update my_gem ,任務只檢查你安裝的版本與gem分支上的版本,而不檢查master gem分支的哈希值。

我是這么認為的,因為我一直運行bundle update ,只有在檢測到新版本(大於我的本地版本)時才會運行gem的“更新過程”。

以下一些參考文獻:

編輯

我看到你可以在Gemfile中檢查顯式聲明的遠程哈希:

# Specify that a git repository should use a particular ref, branch, or tag
:git => 'git://github.com/rails/rails.git', :ref => '4aded' 
:git => 'git://github.com/rails/rails.git', :branch => '2-3-stable' 
:git => 'git://github.com/rails/rails.git', :tag => 'v2.3.5'

但是對於“自動修復”,如果寶石版本比你的本地版本更新,我認為更好的方法是指定一個版本。

編輯2

也許指定一個:branch git gem repo的:branch是你正在尋找的解決方案。

:git => 'git://github.com/rails/rails.git', :branch => 'my_current_master_branch' 

我沒有意識到,因為我擁有寶石,我可以更新寶石並自己檢查一下。 我剛試了一下,這是我的發現:

只有當我們在任何寶石的情況下運行bundle update gemname時,gem才會bundle update gemname ,無論是來自git repo還是來自rubygems.org。 如果沒有Gemfile.lock給出的gem的詳細信息(或者如果Gemfile.lock不存在),它將獲取最新的gem並在Gemfile.lock中寫入gem的詳細信息。

對於來自git repo的gem的情況,當我們運行bundle update gemname ,它會更新到gem的相關分支的最新提交哈希(在我的例子中,它是master),並且它將提交哈希寫入Gemfile.lock 在我的例子中,它看起來像這樣(注意revision塊):

GIT
  remote: git@myprivaterepo.com:mygem.git
  revision: 5311ed765d5724cd20dfbcb87aa66b6f6fcbee7d
  specs:
    mygem (0.0.1)

對於我們運行bundle update gemname時來自rubygems的gem的情況,如果新版本可用並且Gemfile.lock看起來像這樣,它會更新:

GEM
  remote: https://rubygems.org/
  specs:
    actionmailer (3.2.13)

所以,為了回答我自己的問題,當我對git repo中的gem進行bundle update mygem ,它會更新到Git bundle update mygem中的最新提交哈希值(即使gem的版本未更改)。 所以,我不需要更改gem的版本,我只需要推送到git repo並在使用mygem的真實項目中bundle update mygem mygem

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM