Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何克隆已变得过大的git回购?_Git - Fatal编程技术网

如何克隆已变得过大的git回购?

如何克隆已变得过大的git回购?,git,Git,我正在使用一个非常大(>10gb)的git回购协议。repo本身有许多大型二进制文件,每个文件都有许多版本(>100mb)。原因超出了这个问题的范围 目前,无法再从repo进行正确克隆,因为服务器本身将耗尽内存(它有12gb)并发送失败代码。我会把它贴在这里,但要达到失败点需要一个多小时 有什么方法可以让克隆成功吗?哪怕是一家获得回购协议部分副本的公司?或者,我可以用一种不会让服务器窒息的小批量克隆方法?您可以尝试将--depth选项传递给git clone。或者您可以使用rsync或类似的方法

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

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


有什么方法可以让克隆成功吗?哪怕是一家获得回购协议部分副本的公司?或者,我可以用一种不会让服务器窒息的小批量克隆方法?

您可以尝试将
--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