无法将大型存储库从GitLab迁移到GitHub

3

我正在尝试将Gitlab上的私有库迁移到Github。其中包含使用git LFS跟踪的一些大型文件。即使如此,我仍然无法将repo推送到GitHub。由于它是操作系统的完整代码库,因此repo的大小非常巨大,约为75GB。

当我尝试将其推送到GitHub时,会得到以下日志。

Uploading LFS objects: 100% (8600/8600), 5.9 GB | 0 B/s, done
Enumerating objects: 472049, done.
Counting objects: 100% (472049/472049), done.
Compressing objects: 100% (302043/302043), done.
kex protocol error: type 7 seq 16549), 1020.66 MiB | 4.88 MiB/s
kex protocol error: type 7 seq 32979), 1.99 GiB | 4.83 MiB/s
remote: fatal: pack exceeds maximum allowed size
fatal: the remote end hung up unexpectedly
fatal: the remote end hung up unexpectedly

请告诉我是否有任何方法可以绕过大小限制。


1
尝试推送先前分支的修订版本,然后再向前推进...我想那应该可以。git push upstream master~10000:master; git push upstream master~9000:master; 以此类推。 - eftshift0
1个回答

4

为了防止某些DoS攻击,GitHub不允许单次推送超过2GB的文件。除非您使用GitHub导入工具,否则您需要逐步推送该存储库。

您可以通过运行类似以下命令来完成此操作:

git rev-list --reverse --all | ruby -ne 'x ||=0; x += 1; print $_ if x % 30000 == 0;' | xargs -I{} echo git push github +{}:refs/heads/master
git push github +master
git push --mirror github

此操作一次性推送 30000 次提交。一旦这些提交全部完成推送,它会最后一次推送 master 分支以包含正确的数据,然后镜像其余的存储库。


谢谢提供信息。但是我现在遇到的问题是根提交大约有50GB,因为那时我们的操作系统只是纯净的AOSP源代码。所以有没有什么方法可以解决这个问题?或者,我需要将提交拆分成多个并重写整个git历史记录? - Kaustav
1
GitHub通常不允许人们拥有如此大的代码库。您需要联系GitHub支持并要求他们提高代码库的限制,尽管很可能他们会要求您重写代码库。 - bk2204
如果你只有一个分支(主分支),那么这是一个很好的答案。但是如果你有很多分支呢? - Omri
你首先推送主分支,然后再推送其余的分支,这就是 git push --mirror github 的作用。通常,大多数分支都只包含很少的额外提交,一次性将它们全部推送即可。如果你有其他具有重要历史记录的分支,则可能需要先逐步推送它们。 - bk2204

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接