2016-05-30 52 views
2

我的工作場所最近轉而使用git以及將項目之間共享的組件作爲子模塊來建立組件,這些組件在試圖弄清楚如何使用它們的人們中造成普遍的挫敗感。git submodules並不一致地更新

讀一些網絡意見後,我拉項目和子模塊如下:

git pull --recurse-submodules 
git submodule update --recursive --remote --init --merge 

但是,有時檢查子模塊的狀態給了我這樣的:

> git status 
On branch feature 
Your branch is behind 'origin/feature' by 1 commit, and can be fast-forwarded. 
    (use "git pull" to update your local branch) 
nothing to commit, working directory clean 

其解決如果我做

git submodule foreach git pull 

我很茫然。你能告訴我我做錯了什麼嗎?

謝謝!

+0

http://stackoverflow.com/a/21195182/6194839也許'git submodule update --remote --merge'或'git submodule foreach git pull origin master' would work?也許'git submodule --help'可能會指向你正確的路徑。我的第一個問題是你可能有一個命令'--recursive --remote --init --merge',它沒有做你認爲正在做的事情。 –

+0

你能澄清你爲什麼認爲自己做錯了什麼嗎?除非您告訴他們,否則子模塊不會更新。 – eis

+0

@eis,我的印象是'git submodule update'會從子模塊中取出最新的,它顯然不是 –

回答

-2
git pull origin yourbranch --recursive 
cd submodulebrach 
git checkout submodulebrach 
cd .. 
git commit -m submodule 
git push origin yourbranch 
+0

我看不出它是如何回答我的問題的,請你解釋一下吧? –

+0

問題是詢問如何幹淨地更新本地版本的子模塊。我不明白你爲什麼希望OP在這裏推動改變。 –

2

由OP評論:

我的印象是混帳子模塊更新將其拉離子模塊,它顯然不

事實上, 最新它不是。它的作用是解釋例如here

更新

更新註冊子模塊以匹配上層項目預計將在克隆缺失子模塊和更新的 子模塊的工作樹。

合併

的提交記錄在上層項目將被合併到輔助模塊中的當前分支。

超級項目總是會記錄每個子模塊的特定提交。更新命令將使用該提交併進行檢查 - 它不會實際更新它以引用項目可能具有的任何新情況。

你本身沒有做錯任何事,這就是它的工作方式。如果您想將記錄的提交移動到最新的提交,您必須以另一種方式進行。這樣做最好在this other thread中解釋,但簡而言之,做--remote而不是--merge看起來像你之後的事情。

+0

我正在做'--remote'(見問題),這就是讓我困惑的地方。我讀過的所有東西,似乎暗示着這些命令是相同的,但它們並不適合我 –

+0

@AlexO啊,只是注意到你正在使用這兩個命令。你有沒有嘗試離開合併? – eis

+0

是的,它使我處於子模塊的「分離頭部」狀態 –