git push内存不足,malloc失败了

时间:2012-01-13 18:22:19

标签: git github

我正在尝试将我的更改远程推送到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。

16 个答案:

答案 0 :(得分:30)

我的建议是尝试几个与pack相关的git参数:

[pack]
   threads = 1
   deltaCacheSize = 128m
   windowMemory = 50m

对我来说更好的结果是设置git config pack.threads 1git config pack.windowMemory 50m(默认为10米)。

尽管如此,我的主机没有足够的RAM内存(2GB)并且仍然失败。我很难复制repo并将其移动到另一台具有更多RAM(8GB)的机器上。它变得更好但仍然失败。

最后,我下载了最新版本的git(https://github.com/git/git),编译并安装它。这只是通过使用相同的参数运行git repack -adf来解决问题。之后我运行git gc --aggressive --prune=now

一旦我在我的本地机器上修复了repo,我就把它推到掌握,覆盖了远程仓库,git push -f origin master

为防止将来出现类似错误,请尽量不要将不必要的大文件添加到repo中(在我的情况下,我得到了3.5GB的SQL转储:))并禁用大型文件的delta压缩(如图像,PDF,视频) )。将以下行添加到.gitattributes

*.pdf -delta
*.jpg -delta

答案 1 :(得分:19)

您可以尝试使用

更改重新包装的配置
git config --global pack.windowMemory 256m

答案 2 :(得分:13)

使用此:

git gc --auto --prune=today --aggressive 
git repack 
git config --global http.postbuffer 524288000 
git config --global pack.windowMemory 256m

它为我修复了。

答案 3 :(得分:5)

我遇到了同样的问题,在将一些参数更改为1024m之后,问题仍然存在:

[pack]
     threads = 1
     deltaCacheSize = 1024m
     packSizeLimit = 1024m
     windowMemory = 1024m
[core]
     packedGitLimit = 1024m
     packedGitWindowSize = 1024m

我认为这个问题与您的PC的可用RAM内存有关。

我很忙,重新启动后我终于推动了改变。

希望它有所帮助。

答案 4 :(得分:4)

对于使用gitlab并看到此错误的人

找到gitlab config(/etc/gitlab/gitlab.rb)

更改 gitlab_rails ['git_max_size'] 的值(更大的值)

然后: gitlab-ctl重新配置以刷新

答案 5 :(得分:2)

我在.gitconfig文件中删除了这些设置:

[http]
postbuffer = 524288000
[pack]
windowMemory = 1024m
deltaCacheSize = 1024m
packSizeLimit = 1024m

再次推动

答案 6 :(得分:2)

如果您在Gitlab上找到导致远程服务器出现问题的仓库。

Gitlab将存储库存储在此位置

/var/opt/gitlab/git-data/repositories

找到目录并运行此命令。

git repack -a -f -d

完成。

答案 7 :(得分:2)

我在AWS t2.small上遇到了同样的问题。还在运行声纳。我关闭Sonar释放内存,签出并重新启动Sonar。我会增加实例大小。

答案 8 :(得分:2)

在我的情况下,它与客户机没有任何关系。这发生在我身上,因为运行GitLab的服务器的内存已满。我增加了虚拟机的内存,问题解决了。

答案 9 :(得分:1)

检查框中是否启用了交换。

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

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

答案 10 :(得分:1)

对我来说,问题还在于服务器与客户端相比没有足够的内存。如果在结帐时发生这种情况,我会感觉到客户端的问题,而在推高时发生这种情况,服务器可能是问题所在。

答案 11 :(得分:1)

git repack 
git config --global http.postbuffer 524288000 
git config --global pack.windowMemory 256m

对我来说固定了。然后执行git push。

答案 12 :(得分: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

尝试再次推送:

git push

答案 13 :(得分:0)

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

find . -type f -size +50M

答案 14 :(得分:0)

在我的情况下,Git.exe仅需要多一点,即可获得32位进程。

您可以在图片上看到 64位git .exe做得很好。

enter image description here

答案 15 :(得分:-1)

我遇到了同样的问题,我尝试了所有的建议,但解决问题的方法是重新启动计算机......然后,我可以推动。