我目前正在研究位于美国的这个超级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的正确位置。 问题的另一个问题是,我不得不镜像一个回购,但所有*回购,超级金额使用。不同的分支有不同的子模块,所以我必须为每个分支重复这一点。 –