正在尝试成批推送大量提交 [英] Trying to push large number of commits in batches
本文介绍了正在尝试成批推送大量提交的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在处理一个非常大的项目,需要从Team Foundation Services迁移到Git。我成功地执行了本地转换,获得了2800多个需要推送到GitHub的提交。其中一些提交非常大,简单的GIT推送在返回以下错误之前获得了大约3%的结果:
fatal: pack exceeds maximum allowed size
似乎对即将推出的套装的大小有大约2.9 GB的限制。这似乎是合理的,所以我一直在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~10000
、HEAD~9500
、HEAD~9000
等提交,从而成批推送了500个提交。
git push origin master
在所有提交都已推送后,更新远程跟踪分支,以便它记住您已推送master
中的所有提交。
这篇关于正在尝试成批推送大量提交的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文