2013-07-10 92 views
19

我有一個包含其他git存儲庫的git存儲庫。是否存在遞歸推送和/或拉取不僅是元存儲庫而且還有子存儲庫的命令?遞歸Git推/拉?

+0

可能重複[Git - 簡單方法拉最新的所有子模塊](http://stackoverflow.com/questions/1030169/git-easy-way-pull-latest-of-all-submodules)。 – 2013-07-10 13:10:12

回答

8

如果你在談論子模塊,請參閱紙杯蛋糕的答案。

,如果你談論的是一些文件夾層次包含git的回購協議,你可以檢出clustergit,一個工具,我編程:https://github.com/mnagel/clustergit

+0

謝謝,我會試試看。假設遙控器以前都已經設置好了,我只需要在頂層目錄中運行'clustergit -p'來遞歸地拉動? –

+0

@ DavidY.Stephenson yes,clustergit會遞歸掃描'.git'目錄的目錄(默認值:'.')來決定git存儲庫的存放位置。然後它在這些上運行'git status'。如果狀態是乾淨的並且指定了-p,那麼它將執行'git pull',只有在設置了遠程的情況下才會成功,否則會出現警告(但clustergit將繼續與其他存儲庫一起)。 – mnagel

+0

你能給我一個示例命令來說,遞歸地推送到原點主?我從文檔中整理出來有些麻煩。 –

8

不太git pull,但接近:

git fetch --recurse-submodules 

the Git docs

--recurse-submodules[=yes|on-demand|no]

此選項控制是否以及在什麼條件下新的填充子模塊的提交也應該被取出。當設置爲no時,它可以用作布爾選項來完全禁用遞歸,或者當設置爲yes時無條件遞歸到所有已填充的子模塊中,這是默認情況下使用此選項時沒有任何值。如果超級項目檢索提交,該提交將子模塊的引用更新爲不在本地子模塊克隆中的提交,則按需使用即可遞歸到已填充的子模塊中。

+0

我不是(明知)指的是子模塊。我有一個包含其他存儲庫的存儲庫。所有這些存儲庫都由我初始化。我應該把它們變成子模塊嗎? –

9

我發現自己在同樣的情況時,我想更新我的LLVM /鐺庫,並與有點bash的幫助下,我可以「混帳拉」他們每個人是這樣的:

$> for dir in $(find . -name ".git"); do cd ${dir%/*}; git pull ; cd -; done

這將「混帳拉」你的當前目錄下找到所有的git回購協議,如果他們是裸露的庫可能無法正常工作。

1

我剛剛寫了一個腳本在多個git存儲庫上遞歸執行。你可以從這裏抓住它:

https://github.com/DariuszOstolski/rgit

的想法是完全一樣的,但clustergit實施不同。