gpt4 book ai didi

git - 尝试批量推送大量提交

转载 作者:行者123 更新时间:2023-12-04 16:44:34 24 4
gpt4 key购买 nike

我正在处理一个需要从 Team Foundation Services 迁移到 Git 的超大型项目。我成功地执行了本地转换,获得了 2800 多个需要推送到 github 的提交。其中一些提交非常大,一个简单的 git push 在返回以下错误之前完成了大约 3%:

fatal: pack exceeds maximum allowed size

即将推出的包的大小似乎有大约 2.9gb 的限制。这似乎是合理的,所以我一直在 Stackoverflow 上搜索以了解如何将这些提交推上去。我换成使用 SSH,但错误仍然存​​在,但后来我在评论中看到了这行 GIT Bash 代码,它似乎是针对我想要的(分批发送提交):

max=$(git log --oneline|wc -l); for i in $(seq $max -500 1); do echo $i; g=$(git log --reverse --oneline --skip $i -n1|perl -alne'print $F[0]'); git push gh $g:refs/heads/master; done

挑战在于评论并没有真正提到这个命令是如何工作的,或者如何修改它以使其适用于我的情况。我按原样运行代码并收到以下错误:

'gh' does not appear to be a git repository

我想我知道我在做什么,我尝试遵循备用的 bash 代码行:

max=$(git log --oneline|wc -l); for i in $(seq $max -500 1); do echo $i; g=$(git log --reverse --oneline --skip $i -n1|perl -alne'print $F[0]'); git push origin $g:refs/heads/master; done

这会返回以下错误:

[remote rejected] master (refusing to delete the current branch: refs/heads/master)

很明显,我做错了什么,但我对 Git Bash 的了解还不够多,不知道是什么。谁能帮我弄清楚我应该在那里输入什么?

git 分支结果:

  • 大师

最佳答案

max=$(git log --oneline|wc -l); for i in $(seq $max -500 1); do echo $i; git push origin master~$i:refs/heads/master; done; git push origin master

解释:

max=$(git log --oneline|wc -l)

这会列出当前分支中的所有提交并计算提交数。

for i in $(seq $max -500 1); do … done

运行一个循环,将 i 个数字从 $max 赋值到 1,在每个循环中递减 500。

git push origin master~$i:refs/heads/master

将旧提交推送到 master~$i。这是在递减 i 的循环中执行的,因此您可以推送 HEAD~10000HEAD~9500HEAD~9000< 等提交 等,从而批量提交 500 次提交。

git push origin master

在推送所有提交后更新远程跟踪分支,以便它记住您已将所有提交推送到 master

关于git - 尝试批量推送大量提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51267745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com