git push 出现内存不足,malloc 失败。

51

我正在尝试将我的更改推送到GitHub远程,但是偶尔git因为某些原因而失败。

C:\dev\projects>git push -v
Pushing to https://user@github.com/mycompany/My-Project.git
Password for 'github.com':
fatal: Out of memory, malloc failed (tried to allocate 524288000 bytes)
fatal: write error: Invalid argument

这真的非常令人恼火。我运行了以下命令,升级了 git(它抹掉了我的设置,造成了很多痛苦,但我离题了)

git gc --auto --prune=today --aggressive
git repack

我甚至已经提高了这个值的数值

http.postbuffer

但最终它会再次失败。

这是一个典型的Rails 3.1应用程序,磁盘上的总项目大小为9.69 MB。


6
它试图分配500MB有点令人害怕 - 你是在处理巨大的东西吗? - Cascabel
不,问题就在这里,我并没有,总目录大小为55.7MB,而被忽略的日志文件大小为46MB,我已经删除了我的日志文件,请查看编辑。 - Jared Knipp
你是否包含了.git目录?(也就是说,您可能提交然后删除了很多东西?) - Cascabel
不,我运行了几个git命令,但是在删除日志文件时我关闭了rails服务器。我认为我的机器可能由于JRuby而耗尽了内存...很难想象8GB的内存会如此快地用完。 - Jared Knipp
3
当然,如果你的机器没有其他原因即将崩溃那就很好了,但 Git 这么要求 500MB 是有原因的。所以,如果你想试着找到问题所在,检查 .git 目录的大小是一个开始;如果它比你预期的要大得多,那么你可以回顾最近的历史记录,看看是否存在任何巨大的差异(例如尝试使用 git log --shortstat 命令)。 - Cascabel
显示剩余2条评论
16个回答

1

检查您的计算机是否启用了交换空间。

$free -m
             total       used       free     shared    buffers     cached
Mem:           494        339        154         33          0         60
-/+ buffers/cache:        278        216
Swap:         2047         40       2007

如果没有,你可以创建一个。我尝试了这个Ubuntu指南,它也适用于Debian。但是应该有很多关于这个主题的教程。

1

对我来说,问题也与服务器内存不足有关,而不是客户端。如果在结账时出现此问题,则可能是客户端的问题,如果在推送时出现此问题,则可能是服务器的问题。


1
我尝试了所有列出的答案;然而,我的情况是由于提交中文件大小。当我检查了我的提交内容后,我意识到其中一个文件的大小导致了这个问题。
我首先记录了我的提交以显示提交ID,然后使用git show列出了文件:
git log
git show <COMMIT ID> --name-only

确定是否有大文件。如果是这样,并且您不需要将其包含在提交中,请从重置最近的提交开始:

git reset --soft HEAD~1

下一步,取消暂存文件:
git reset HEAD <file>

(可选)如果您想从索引中删除该文件,请运行:

git rm --cached <file>

然后使用 --amend 再次提交:
git commit --amend

Try pushing again:

git push

0

我曾经遇到同样的问题,尝试了所有建议,但解决问题的方法是重新启动电脑...然后,我就可以推送了。


事实上,我也遇到了完全相同的信息,当我尝试像其他答案一样解决它时,并没有解决我的情况。后来我更好地阅读和理解了问题,重启了电脑,可能是因为它清除了一些空闲空间内存,所以我认为与其他遇到同样问题的人分享这个经验是很好的。你认为删除我的回答更好吗? - Luiz Rossi

0

你可能只有一个或多个非常大的文件。检查文件是否大于50MB,这是正常的Github限制:

find . -type f -size +50M

0
在我的情况下,Git.exe 需要比 32 位进程更多的空间。正如您在图片中所看到的那样,64 位的 Git.exe 做得很好。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接