Git push:致命:内存不足,malloc失败了

时间:2012-06-21 09:58:49

标签: git

当推送到远程服务器时,我收到错误:

Counting objects: 58, done.
Compressing objects: 100% (35/35), done.
fatal: Out of memory, malloc failed (tried to allocate 595059947 bytes)
error: pack-objects died of signal 13
error: failed to push some refs to 'git@cassandra.predictioninstitute.com:development'"

我认为问题在于我不小心编写了一些非常大的日志文件。但我后来删除了它们(git rm logfile),但错误仍然存​​在。而且他们没有出现在“git status”中。我该如何从中恢复?

3 个答案:

答案 0 :(得分:4)

如果您反对重写历史记录或不反对,我无法通过您的评论来判断。如果您不反对,此命令将删除历史记录中的大文件。

警告:这是破坏性且不可逆转的。首先备份您的存储库。如果您不喜欢结果,只需恢复备份:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch <file>' \
--prune-empty --tag-name-filter cat -- --all

该命令将从分支的历史记录中删除<file>。为每个文件运行它会导致您遇到麻烦。

答案 1 :(得分:3)

以下命令为我解决了这个问题:

git config --global pack.windowMemory 256m

这会影响增量压缩的效果,因此您可能需要先尝试更大的尺寸,例如1g,具体取决于您的硬件和带宽。

此处有更多详情:https://www.kernel.org/pub/software/scm/git/docs/git-pack-objects.html

答案 2 :(得分:0)

我在推送到覆盆子pi上托管的git-repo时遇到了这个错误。我试图推送的其中一个文件大于git服务器上的可用内存(内存+交换)。

通过在git服务器上临时创建一个新的交换文件解决了这个问题:

dd if=/dev/zero of=/media/store/swapfile bs=1024 count=655360

mkswap /media/store/swapfile

swapon /media/store/swapfile

运行以下命令验证是否添加了新的交换分区:

swaponcat /proc/swapsfree

(我选择不将交换文件添加到/etc/fstab,因此交换文件将在重新启动后消失。)