我目前正在研究位于美国的这个 supergit(一个带有子模块的 git 存储库),克隆大约需要 40 分钟。为了减少克隆时间,需要创建该 repo 的本地镜像。子模块的路径是相对于 supergit 的,并且有多个分支,其中一些具有比其他更多的子模块。
我制作了一个脚本,解析所有子模块及其相对路径,并将每个子模块克隆到正确的位置,但仅适用于一个分支(我必须对每个分支重复此操作,这就是我卡住的地方)。
有没有办法以干净的方式克隆这个超级git?
我目前正在研究位于美国的这个 supergit(一个带有子模块的 git 存储库),克隆大约需要 40 分钟。为了减少克隆时间,需要创建该 repo 的本地镜像。子模块的路径是相对于 supergit 的,并且有多个分支,其中一些具有比其他更多的子模块。
我制作了一个脚本,解析所有子模块及其相对路径,并将每个子模块克隆到正确的位置,但仅适用于一个分支(我必须对每个分支重复此操作,这就是我卡住的地方)。
有没有办法以干净的方式克隆这个超级git?
由于您可以解析一个 .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 ,
"
检查上游是否在不同的提交中给出了不同的定义。