我正在尝试将我的更改远程推送到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。
答案 0 :(得分:30)
我的建议是尝试几个与pack相关的git参数:
[pack]
threads = 1
deltaCacheSize = 128m
windowMemory = 50m
对我来说更好的结果是设置git config pack.threads 1
和git 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)
答案 15 :(得分:-1)
我遇到了同样的问题,我尝试了所有的建议,但解决问题的方法是重新启动计算机......然后,我可以推动。