11

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

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

有什么方法可以让克隆成功吗?甚至是一个抓取回购的部分副本的人?或者我可以克隆成一口大小的块,不会让服务器窒息?

4

5 回答 5

9

一个回答“我如何克隆一个变得太大的 git 存储库?” '减小它的大小,去除大斑点'

(我必须承认,提问者在评论中澄清说回购修复“超出了这个问题的范围”,但是评论还说“我正在努力快速修复以允许我现在克隆回购”,所以我发布这个答案是因为 a)他们可能不知道 BFG,因此高估了清理回购的难度,并且 b)确实非常快。

要轻松快速地清理 repo ,请使用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 的作者。

于 2013-09-17T18:52:25.053 回答
8

您可以尝试将--depth选项传递给git clone. rsync或者您可以使用或类似的方式复制它?

于 2013-09-17T13:19:55.683 回答
6

通过rsync将其指向包含.git. 然后将 .git/config 中的遥控器更改为指向原始遥控器。

这是我头脑中唯一需要更改的关键.git/config,但我会扫描寻找任何其他特定于主机的键。他们中的大多数都是不言自明的。

于 2013-09-17T13:28:47.007 回答
1

尝试在服务 repo 上重新配置包创建参数,尤其是 git 的 ~no limit~ 默认为 pack.windowmemory.

我会从

git config pack.windowmemory 1g

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

于 2013-09-17T20:19:56.797 回答
1

如果您对服务器具有物理访问权限或 shell 访问权限,则可以通过外部硬盘驱动器或 FTP 手动传输 repo。如果存储库是裸存储库,请参阅如何将裸 Git 存储库转换为就地正常存储库

于 2013-09-17T13:29:35.840 回答