正在尝试成批推送大量提交 [英] Trying to push large number of commits in batches

查看:23
本文介绍了正在尝试成批推送大量提交的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在处理一个非常大的项目,需要从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~10000HEAD~9500HEAD~9000等提交,从而成批推送了500个提交。

git push origin master

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

这篇关于正在尝试成批推送大量提交的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆