我正在使用一个非常大(> 10gb)的 git 存储库。存储库本身有许多大型二进制文件,每个文件都有许多版本(> 100mb)。其原因超出了这个问题的范围。
目前,不再可能从 repo 正确克隆,因为服务器本身将耗尽内存(它有 12gb)并发送失败代码。我会把它贴在这里,但要花一个多小时才能到达故障点。
有什么方法可以让克隆成功吗?甚至是一个抓取回购的部分副本的人?或者我可以克隆成一口大小的块,不会让服务器窒息?
我正在使用一个非常大(> 10gb)的 git 存储库。存储库本身有许多大型二进制文件,每个文件都有许多版本(> 100mb)。其原因超出了这个问题的范围。
目前,不再可能从 repo 正确克隆,因为服务器本身将耗尽内存(它有 12gb)并发送失败代码。我会把它贴在这里,但要花一个多小时才能到达故障点。
有什么方法可以让克隆成功吗?甚至是一个抓取回购的部分副本的人?或者我可以克隆成一口大小的块,不会让服务器窒息?
一个回答“我如何克隆一个变得太大的 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 的作者。
您可以尝试将--depth
选项传递给git clone
. rsync
或者您可以使用或类似的方式复制它?
通过rsync
将其指向包含.git
. 然后将 .git/config 中的遥控器更改为指向原始遥控器。
这是我头脑中唯一需要更改的关键.git/config
,但我会扫描寻找任何其他特定于主机的键。他们中的大多数都是不言自明的。
尝试在服务 repo 上重新配置包创建参数,尤其是 git 的 ~no limit~ 默认为 pack.windowmemory
.
我会从
git config pack.windowmemory 1g
因为默认情况下它会为每个核心使用那么多。
如果您对服务器具有物理访问权限或 shell 访问权限,则可以通过外部硬盘驱动器或 FTP 手动传输 repo。如果存储库是裸存储库,请参阅如何将裸 Git 存储库转换为就地正常存储库。