我目前正在研究位於美國的這個超級git(帶子模塊的git回購),需要大約40分鐘才能克隆。 爲了減少克隆時間,需要創建該回購的本地鏡像。 子模塊的路徑與supergit相關,並且有多個分支,其中一些子模塊比其他子模塊多。從超級大本營創建本地git鏡像
我做了一個腳本,它解析所有子模塊及其相對路徑,並將每個子模塊克隆到正確的位置,但僅適用於一個分支(我必須對每個分支重複此操作,這就是我卡住的位置)。
有沒有辦法以一種乾淨的方式克隆這個supergit?
我目前正在研究位於美國的這個超級git(帶子模塊的git回購),需要大約40分鐘才能克隆。 爲了減少克隆時間,需要創建該回購的本地鏡像。 子模塊的路徑與supergit相關,並且有多個分支,其中一些子模塊比其他子模塊多。從超級大本營創建本地git鏡像
我做了一個腳本,它解析所有子模塊及其相對路徑,並將每個子模塊克隆到正確的位置,但僅適用於一個分支(我必須對每個分支重複此操作,這就是我卡住的位置)。
有沒有辦法以一種乾淨的方式克隆這個supergit?
既然你可以分析一個.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 ,
"
檢查是否已經在不同的提交給出不同的定義。
謝謝你的回答,我現在正在嘗試這個,但如果我不是那個人,那麼不應該「sed s/^ [0-9a-f]/d」有額外的破折號? 你想用什麼替換? –
哎呀,不,不應該有一個's'的。固定。 – jthill
克隆是一個完整的回購操作,所以當你克隆子模塊時,你會得到所有的分支。所以我不明白爲什麼你認爲你「必須爲每個分支重複這個」。具體來說,你對那些不起作用的其他分支做了什麼,因此你認爲更多克隆是必要的? – jthill
比方說,我創建了鏡子。我可以從鏡像克隆,但是當我嘗試執行'git submodule update --init'時,這會失敗。 Git子模塊更新嘗試從my_mirror /../ relative_repo_pos下載數據,但它們僅存在於original_repo /../ relative_repo_pos。 這就是爲什麼我必須手動獲取所有這些存儲庫,並將它們置於相對於my_mirror的正確位置。 問題的另一個問題是,我不得不鏡像一個回購,但所有*回購,超級金額使用。不同的分支有不同的子模塊,所以我必須爲每個分支重複這一點。 –