我正在处理一个非常大的项目,需要从Team Foundation Services迁移到Git。我成功地执行了本地转换,获得了2800多个需要推送到github的提交。其中一些提交非常大,一个简单的git push在返回以下错误之前获得了大约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分支结果:
- 主
2条答案
按热度按时间fslejnso1#
说明:
这将列出当前分支中的所有提交并计算提交的数量。
运行一个循环,将
i
编号从$max
分配到1,每次循环递减500。将旧提交推送到
master~$i
。这是在上面的循环中执行的,减少i
,所以你推提交,如HEAD~10000
,HEAD~9500
,HEAD~9000
等,从而推提交在一批500提交在一批。在所有提交都被推送之后,更新远程跟踪分支,这样它就会记住你已经在
master
中推送了所有提交。jyztefdp2#
添加到@phd'回答:如果有合并提交,应该使用
来计数提交。