如何克隆已经变得太大的git仓库?

时间:2013-09-17 13:12:42

标签: git

我正在使用非常大的git repo(> 10gb)。 repo本身有许多大型二进制文件,每个文件有许多版本(> 100mb)。其原因超出了这个问题的范围。

目前,不再可能从repo中正确克隆,因为服务器本身将耗尽内存(它有12gb)并发送失败代码。我会把它粘贴在这里,但要花费一个多小时才能达到失败的程度。

我有什么方法可以让克隆成功吗?甚至一个抓住回购的部分副本?或者我可以用咬合大小的块来克隆那些不会让服务器窒息的方法?

5 个答案:

答案 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

因为默认情况下每个核心会使用那么多。