2013-02-19 55 views
3

我的個人存儲庫有一些存儲庫作爲子模塊。而下面的命令遞歸地git拉所有的git子模塊只需

$ git submodule foreach git pull origin master 

正進入紅寶石庫因爲Ruby庫似乎它不具有主分支和「混帳拉」停止後立即面臨以下結果。

Entering 'rails' 
From git://github.com/rails/rails 
* branch   master  -> FETCH_HEAD 
Already up-to-date. 
Entering 'roo' 
From git://github.com/hmcgowan/roo 
* branch   master  -> FETCH_HEAD 
Already up-to-date. 
Entering 'ruby' 
fatal: Couldn't find remote ref master 
Stopping at 'ruby'; script returned non-zero status. 

所以我的問題是what should I do to git pull for all of submodules only by git command?應該怎麼做讓一個腳本這樣做呢?我希望只有一個由git提供的命令行會做到這一點。

+1

如果你不想'git的子模塊的foreach ...'停止時在子回購的一個出現錯誤只需添加'|| :'給命令,即'git submodule foreach'git pull origin master || :'' – 2013-02-20 08:13:13

回答

2

git子模塊通常處於分離HEAD狀態,因此它們上的git pull無法弄清楚在合併階段您的意思。如果您所要做的只是將最新更改導入存儲庫,請嘗試使用git submodule foreach git fetch。如果您想要將每個子模塊master更新爲其各自的origin/master,那麼您可以跟進git submodule foreach git checkout master; git submodule foreach git merge origin/master

然後,當然,您需要決定您希望主存儲庫使用的每個子模塊的版本(我不建議盲目地始終使用origin/master--它可能不穩定 - 選擇已知優質更好標籤或其他內容),請查看子模塊中的這些版本,並在主要存儲庫中跟進相應的git addgit commit

4

只需添加|| true到您的子模塊的命令:

git submodule foreach 'git commit -m "my commit message" || true' 
+0

輝煌,你搖滾的男人! – 2015-04-21 20:49:26