尝试批量推送大量提交 我正在研究一个非常庞大的项目,需要从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)
对于即将推出的软件包,似乎有大约2.9gb的大小限制。这似乎是合理的,所以我一直在搜索Stackoverflow,看看如何提高这些提交。我改为使用SSH,但错误仍然存在,但后来我在一条注释中遇到了这行GIT Bash代码,似乎是针对我想要的内容(成批发送提交): 挑战在于,评论中没有真正提到这个命令是如何工作的,也没有提到如何修改它以使其适合我的情况。我按原样运行代码并得到以下错误:尝试批量推送大量提交 我正在研究一个非常庞大的项目,需要从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
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很可能你没有branchmain
,你有branchmaster
。如果你有一个不同的问题,你应该把它作为一个问题而不是评论来问。注释用于改进问题和答案。这是一个巨大的帮助。使用git-push-origin-main~$i:refs/heads/main
我得到了以下错误:error:src-refspec-main~500与任何
都不匹配。我不知道为什么..@mateonnez很可能你没有branchmain
,你有branchmaster
。如果你有一个不同的问题,你应该把它作为一个问题而不是评论来问。评论是为了改进问题和答案。