我正在使用非常大的git仓库(> 10gb).repo本身有许多大型二进制文件,每个文件有许多版本(> 100mb).其原因超出了本问题的范围.
目前,不再可能从repo中正确克隆,因为服务器本身将耗尽内存(它有12gb)并发送失败代码.我会把它粘贴在这里,但要花费一个多小时才能达到失败的程度.
有没有什么方法可以让克隆成功?甚至一个抓住回购的部分副本?或者我可以克服一口大小的块,这不会让服务器窒息?
一个答案是'如何克隆已经变得太大的git仓库?' 是'减少它的大小,删除大Blob'.
(我必须承认,提问者在一条评论中澄清说,复制是'超出了这个问题的范围',但是评论也说'我正在努力快速修复,允许我立即克隆回购',所以我发布这个答案是因为a)他们可能没有意识到BFG,因此高估了清理回购的难度,而且b)确实非常非常快.
要轻松快速地清洁回购,请使用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的作者.
用于rsync通过将整个仓库指向包含的顶级目录来复制整个仓库.git.然后更改.git/config中的遥控器以指回原始.
这是我头脑中唯一需要改变的关键.git/config,但我会扫描寻找任何其他主机特定的关键.其中大多数都是不言自明的.