如何克隆已变得过大的git回购?
我正在使用一个非常大(>10gb)的git回购协议。repo本身有许多大型二进制文件,每个文件都有许多版本(>100mb)。原因超出了这个问题的范围 目前,无法再从repo进行正确克隆,因为服务器本身将耗尽内存(它有12gb)并发送失败代码。我会把它贴在这里,但要达到失败点需要一个多小时如何克隆已变得过大的git回购?,git,Git,我正在使用一个非常大(>10gb)的git回购协议。repo本身有许多大型二进制文件,每个文件都有许多版本(>100mb)。原因超出了这个问题的范围 目前,无法再从repo进行正确克隆,因为服务器本身将耗尽内存(它有12gb)并发送失败代码。我会把它贴在这里,但要达到失败点需要一个多小时 有什么方法可以让克隆成功吗?哪怕是一家获得回购协议部分副本的公司?或者,我可以用一种不会让服务器窒息的小批量克隆方法?您可以尝试将--depth选项传递给git clone。或者您可以使用rsync或类似的方法
有什么方法可以让克隆成功吗?哪怕是一家获得回购协议部分副本的公司?或者,我可以用一种不会让服务器窒息的小批量克隆方法?您可以尝试将
--depth
选项传递给git clone
。或者您可以使用rsync
或类似的方法复制它?使用rsync
将整个repo复制到包含.git
的顶级目录。然后将.git/config中的遥控器更改为指向原始遥控器
这是我脑海中唯一需要在
.git/config
中更改的关键,但我会浏览所有其他特定于主机的关键。大多数都是不言自明的。如果您对服务器具有物理访问或外壳访问权限,则可以通过外部硬盘驱动器或FTP手动传输回购协议。如果回购协议是空的,请参阅。对于“如何克隆一个变得过大的git回购协议”的一个答案是“缩小它的大小,删除大的blob”
(我必须承认,追问者认为回购修复“超出了这个问题的范围”,但评论中还说“我正在为一个快速修复工作,以允许我现在克隆回购”,所以我发布这个答案,因为a)他们可能不知道BFG,因此高估了清理回购的难度,b)它确实非常快
要轻松快速地清理回购协议,请使用:
任何大小超过100MB的旧文件(不在最新提交中)都将从Git存储库的历史记录中删除。然后可以使用git gc
清除死数据:
$ git gc --prune=now --aggressive
一旦这样做了,你的回购协议就会小得多,应该可以毫无问题地克隆
完全公开:我是BFG回购清理器的作者。尝试在服务回购上重新配置包创建参数,尤其是git的~no limit~默认设置 我先从
git config pack.windowmemory 1g
因为默认情况下,每个核心会使用那么多 Git应该用来存储源代码。我想不出一个程序的代码会占用那么多空间,所以你可能存储了很多不应该存在的非源代码?你可以从服务器上单独下载每个文件,然后重新设计你的代码库——只在git中留下代码,同时将所有媒体和其他东西移动到某个单独的存储库解决方案中;回购修复正在进行中,但超出了这个问题的范围。看看深度的选项,有没有一种迭代使用它的方法可以给我一个完整的回购?我确实需要一个合适的工作副本。恐怕不行,我想这是一个快速修复得到这棵树的方法。如果你想要整件事,我会选择rsync。哇,只是看了你的。对git社区的巨大贡献!git似乎在2016年停止支持rsync协议:。此方法不依赖git over rsync,后者是git传输协议。在这里,我只是使用rsync作为文件传输方法,不知道我传输的文件是git repo
scp
也同样有效,我只是认为值得指出,因为问题在于如何克隆回购协议,而回购协议假设git转移。
git config pack.windowmemory 1g