我正在使用非常大的git repo(> 10gb)。 repo本身有许多大型二进制文件,每个文件有许多版本(> 100mb)。其原因超出了这个问题的范围。
目前,不再可能从repo中正确克隆,因为服务器本身将耗尽内存(它有12gb)并发送失败代码。我会把它粘贴在这里,但要花费一个多小时才能达到失败的程度。
我有什么方法可以让克隆成功吗?甚至一个抓住回购的部分副本?或者我可以用咬合大小的块来克隆那些不会让服务器窒息的方法?
答案 0 :(得分:9)
'如何克隆已经变得太大的git仓库?的一个答案是'减小它的大小,删除Big Blob'。
(我必须承认,那个回购的提问者clarifies in a comment“超出了这个问题的范围”,但评论中也说“我正在为快速解决方案而努力” strong>允许我现在克隆回购',所以我发布这个答案是因为a)他们可能不知道BFG,因此高估了清理回购的难度,而且b)确实如此,非常非常快速。
要轻松清理回购并快速,请使用The BFG:
$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git
任何超过100MB的旧文件(不在最新提交中)都将从Git存储库的历史记录中删除。然后,您可以使用git gc
清除死数据:
$ git gc --prune=now --aggressive
一旦完成,您的仓库将会小得多,并且应该克隆没有问题。
完全披露:我是BFG Repo-Cleaner的作者。
答案 1 :(得分:7)
您可以尝试将--depth
选项传递给git clone
。或者您可以使用rsync
或其他类似内容复制它?
答案 2 :(得分:5)
使用rsync
通过将整个仓库指向包含.git
的顶级目录来复制整个仓库。然后更改.git / config中的遥控器以指回原始。
这是我头脑中唯一需要在.git/config
中更改的关键,但我会搜索其他任何特定于主机的内容。其中大多数都是不言自明的。
答案 3 :(得分:1)
如果您具有对服务器的物理访问权限或shell访问权限,则可以通过外部硬盘驱动器或FTP手动传输存储库。如果回购是裸的,请参阅How Do I Convert a Bare Git Repository Into a Normal One in Place。
答案 4 :(得分:1)
尝试在服务仓库上重新配置包创建参数,尤其是pack.windowmemory
的git's ~no limit~default。
我从
开始git config pack.windowmemory 1g
因为默认情况下每个核心会使用那么多。