Git克隆失败并出现内存不足错误 - “致命:内存不足,malloc失败(尝试分配905574791字节)/致命:index-pack失败”

时间:2011-09-30 08:44:03

标签: git memory malloc debian

我正在尝试将大型(1.4GB)Git存储库克隆到具有384MB RAM的32位Debian VM。我正在使用Git 1.7.2.5,并使用SSH协议进行克隆('git clone user@host.com:/ my / repo')

克隆因此消息失败:

remote: Counting objects: 18797, done.
remote: warning: subobtimal pack - out of memory
remote: Compressing objects: 100% (10363/10363), done.
fatal: out of memory, malloc failed (tried to allocate 905574791 bytes)
fatal: index-pack failed

我已经尝试减少Git用于在主机存储库端重新打包并重新打包的内存量:

git config pack.windowMemory 10m
git config pack.packSizeLimit 20m
git repack -a -d

我的问题如下:

  1. 这是一个客户端大小(克隆端)问题,还是应该在我克隆的repo中解决?
  2. 在任何一种情况下,有什么办法可以让克隆成功吗?在线的许多潜在解决方案涉及以下部分/全部内容,在这种情况下,这些都不可接受:

    • 实质上更改存储库的内容(即删除大文件)
    • 为正在进行克隆的VM提供更多RAM
    • 为正在进行克隆的VM提供64位虚拟CPU
    • 带外传输(例如使用Rsync或SFTP传输.git目录)
  3. 提前致谢。

4 个答案:

答案 0 :(得分:3)

git clone不会查看您的pack.packSizeLimit设置,无论如何都会将所有内容都转移到一个包中 - 除非它自上次查看后发生变化。

使用SCP或Rsync可能是一种解决您的问题的方法。删除“无用的”大文件,然后重新打包您尝试克隆的存储库也可以提供帮助。

为VM提供更多RAM也可能有所帮助 - 我认为您不需要64位地址空间来分配900MB ...您还可以为其提供足够的SWAP空间来处理900MB包而不是增加RAM。

答案 1 :(得分:0)

我使用MSysGit 32位在Windows上遇到了类似的问题。 来自Cygwin的git 64位完成了这项工作。 也许你应该使用64位Debian VM(而不是32位)。

我的original answer可用于问题Git on Windows, “Out of memory - malloc failed”

答案 2 :(得分:0)

今天我遇到了同样的问题。 Git服务器内存不足,但gitlab报告说还有内存可用。我们用htop检查了内存(报告没有可用),重新启动gitlab,一切都恢复正常。

答案 3 :(得分:-6)

sudo git pull

每次拉动时我都会遇到相同的错误消息,而sudo git pull实际帮助我克服了此错误消息并且拉动成功。