尝试批量推送大量提交 我正在研究一个非常庞大的项目,需要从Team Foundation Services迁移到Git。我成功地执行了本地转换,获得了需要推送到github的2800多个提交。其中一些提交相当大,在返回以下错误之前,一个简单的git推送大约可以获得3%的成功率: fatal: pack exceeds maximum allowed size 'gh' does not appear to be a git repository [remote rejected] master (refusing to delete the current branch: refs/heads/master)

尝试批量推送大量提交 我正在研究一个非常庞大的项目,需要从Team Foundation Services迁移到Git。我成功地执行了本地转换,获得了需要推送到github的2800多个提交。其中一些提交相当大,在返回以下错误之前,一个简单的git推送大约可以获得3%的成功率: fatal: pack exceeds maximum allowed size 'gh' does not appear to be a git repository [remote rejected] master (refusing to delete the current branch: refs/heads/master),git,github,git-bash,Git,Github,Git Bash,对于即将推出的软件包,似乎有大约2.9gb的大小限制。这似乎是合理的,所以我一直在搜索Stackoverflow,看看如何提高这些提交。我改为使用SSH,但错误仍然存在,但后来我在一条注释中遇到了这行GIT Bash代码,似乎是针对我想要的内容(成批发送提交): 挑战在于,评论中没有真正提到这个命令是如何工作的,也没有提到如何修改它以使其适合我的情况。我按原样运行代码并得到以下错误: fatal: pack exceeds maximum allowed size 'gh' does not

对于即将推出的软件包,似乎有大约2.9gb的大小限制。这似乎是合理的,所以我一直在搜索Stackoverflow,看看如何提高这些提交。我改为使用SSH,但错误仍然存在,但后来我在一条注释中遇到了这行GIT Bash代码,似乎是针对我想要的内容(成批发送提交):

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

fatal: pack exceeds maximum allowed size
'gh' does not appear to be a git repository
[remote rejected] master (refusing to delete the current branch: refs/heads/master)
认为我知道我在做什么,我尝试了以下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
这将返回以下错误:

fatal: pack exceeds maximum allowed size
'gh' does not appear to be a git repository
[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 … 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
中推送了所有提交

说明:

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

中推送了所有提交。您的项目是否包含大型二进制对象?几个-加上大量源文件我不认为源文件是问题所在。我怀疑是杠杆收购。是否有机会重新启动迁移并对每个LBO进行单独的提交?LBO进行单独的提交,但Git在上传期间将所有提交打包到一个巨大的包中。我希望将上传分为500个提交块,以保持在包的限制下。可能的解决方法:在LBO提交之前在提交处创建一个分支,并推动该分支。将分支重置为LBO提交并再次推送。对每个LBO提交重复此操作。您的项目是否包含大型二进制对象?一对-加上大量源文件我不认为源文件是问题所在。我怀疑是杠杆收购。是否有机会重新启动迁移并对每个LBO进行单独的提交?LBO进行单独的提交,但Git在上传期间将所有提交打包到一个巨大的包中。我希望将上传分为500个提交块,以保持在包的限制下。可能的解决方法:在LBO提交之前在提交处创建一个分支,并推动该分支。将分支重置为LBO提交并再次推送。对每个LBO提交都重复此操作。这是一个巨大的帮助。使用
git push origin main~$i:refs/heads/main
我得到了以下错误:
错误:src refspec main~500与任何
不匹配。我不知道为什么..@mateonnez很可能你没有branch
main
,你有branch
master
。如果你有一个不同的问题,你应该把它作为一个问题而不是评论来问。注释用于改进问题和答案。这是一个巨大的帮助。使用
git-push-origin-main~$i:refs/heads/main
我得到了以下错误:
error:src-refspec-main~500与任何
都不匹配。我不知道为什么..@mateonnez很可能你没有branch
main
,你有branch
master
。如果你有一个不同的问题,你应该把它作为一个问题而不是评论来问。评论是为了改进问题和答案。