2013-10-10 96 views
2

我目前正在研究位於美國的這個超級git(帶子模塊的git回購),需要大約40分鐘才能克隆。 爲了減少克隆時間,需要創建該回購的本地鏡像。 子模塊的路徑與supergit相關,並且有多個分支,其中一些子模塊比其他子模塊多。從超級大本營創建本地git鏡像

我做了一個腳本,它解析所有子模塊及其相對路徑,並將每個子模塊克隆到正確的位置,但僅適用於一個分支(我必須對每個分支重複此操作,這就是我卡住的位置)。

有沒有辦法以一種乾淨的方式克隆這個supergit?

+0

克隆是一個完整的回購操作,所以當你克隆子模塊時,你會得到所有的分支。所以我不明白爲什麼你認爲你「必須爲每個分支重複這個」。具體來說,你對那些不起作用的其他分支做了什麼,因此你認爲更多克隆是必要的? – jthill

+0

比方說,我創建了鏡子。我可以從鏡像克隆,但是當我嘗試執行'git submodule update --init'時,這會失敗。 Git子模塊更新嘗試從my_mirror /../ relative_repo_pos下載數據,但它們僅存在於original_repo /../ relative_repo_pos。 這就是爲什麼我必須手動獲取所有這些存儲庫,並將它們置於相對於my_mirror的正確位置。 問題的另一個問題是,我不得不鏡像一個回購,但所有*回購,超級金額使用。不同的分支有不同的子模塊,所以我必須爲每個分支重複這一點。 –

回答

0

既然你可以分析一個.gitmodules文件留下的唯一一件事就是找到他們:上游

# collect all .gitmodules definitions into one file 
git rev-list --all --full-history --reverse -- .gitmodules \ 
| sort -u \ 
| sed s/$/:.gitmodules/ \ 
| git cat-file --batch \ 
| sed /^[0-9a-f]/d \ 
> gitmodules-aggregate 

# format as executable commands to build a dedup'd one: 
git config -lf gitmodules-aggregate | sort -u \ 
| sed " 
    s/=//
    s/'/'\\''/g 
    s//'/ 
    s/$/'/ 
    s,^,git config -f gitmodules-consolidated , 
" 

檢查是否已經在不同的提交給出不同的定義。

+0

謝謝你的回答,我現在正在嘗試這個,但如果我不是那個人,那麼不應該「sed s/^ [0-9a-f]/d」有額外的破折號? 你想用什麼替換? –

+0

哎呀,不,不應該有一個's'的。固定。 – jthill