Ruby on rails 轨道&x2B;吉特+;heroku-git推送错误

Ruby on rails 轨道&x2B;吉特+;heroku-git推送错误,ruby-on-rails,git,ruby-on-rails-3,github,heroku,Ruby On Rails,Git,Ruby On Rails 3,Github,Heroku,我正在尝试使用:git push heroku master将我的应用程序推送到heroku。这个过程运行了一段时间,然后抛出了我以前从未见过的各种错误,我在谷歌上找不到太多帮助 以下是错误日志窗体控制台: XXXXX-MacBook-XXXXXX xxxx$ git push heroku master Counting objects: 7885, done. Delta compression using up to 4 threads. git(237,0xb0185000) mallo

我正在尝试使用:
git push heroku master
将我的应用程序推送到heroku。这个过程运行了一段时间,然后抛出了我以前从未见过的各种错误,我在谷歌上找不到太多帮助

以下是错误日志窗体控制台:

XXXXX-MacBook-XXXXXX xxxx$ git push heroku master
Counting objects: 7885, done.
Delta compression using up to 4 threads.
git(237,0xb0185000) malloc: *** mmap(size=81125376) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
warning: suboptimal pack - out of memory
git(237,0xb0185000) malloc: *** mmap(size=93798400) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
git(237,0xb0185000) malloc: *** mmap(size=93798400) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
fatal: Out of memory, malloc failed (tried to allocate 93797389 bytes)
error: pack-objects died with strange error
error: failed to push some refs to 'git@heroku.com:xxxxx-xxx-xx.git'
有人知道这一切意味着什么以及为什么会发生吗

此外,我注意到我的: /Users/xxxxxx/Sites/xxxxxx/.git/objects文件夹是700+兆,不确定这是否正常,因为我是rails和github的新手


感谢您的帮助。

大多数问题解决方法都在上面的评论中;当我们转过去聊天时,事情已经基本解决了。这里有一个答案,只是为了帮助解决这个问题

似乎存储库中存在一些未知问题,导致objects目录失控。我们实际上不需要确定这是什么,因为所有提交都已推送到github存储库。简单地从这里开始(hooray for DVCS提供免费备份)创建了一个非常好的存储库来取代旧的存储库

故事的寓意:如果你的.git目录是你内容大小的20倍,并且在日常操作中导致malloc/mmap失败,那么你的repo可能有问题。

简短回答: 在执行git push heroku master之前,运行git repack-a-d--window memory=200m

为什么?? 据我所知,GitPush运行GitGC,它运行GitRepack

问题是,如果没有传递最大内存大小,那么在压缩时git将占用无限量的内存(也称为计算机中的所有内存)。因此出现内存不足错误

因此,在执行git push heroku master之前,请运行git repack-a-d--window memory=200m

这将在压缩时使用最大200MB的内存,从而防止进程内存不足


有关更多详细信息,请参阅。

应该能够将packsize限制为100mb,并将线程数限制为1:

$ git config --global pack.packSizeLimit "100m"

$ git config --global pack.threads "1"

你最近有没有犯过一个大错误(可能是偶然的)?这对于一个.git目录来说是相当大的;我不希望看到这种情况,除非跟踪的内容有数百MB,并且有大量的历史记录。您提到的目录是保存存储库全部内容的目录。回购协议并不跟踪它,而是回购协议存储数据的方式。我绝对建议您查找大文件(不在.git目录中)。如果git push试图获取80-90MB的内存,这是一个很好的迹象,你有一些相当大的对象。我不知道mac上有什么可用的东西,但希望你可以做
查找-从顶层查找大小为+10M的文件,以查找大小至少为10MB的文件。另一种可能性:你有经常变化的二进制文件吗?哇。听起来你有过一些不同寻常的经历。如果运行
git gc
,会发生什么?或你有过几次这样的失败吗?我想知道是否有一堆部分构建的打包文件被中止的推送留下?它们可能位于易于识别的临时文件名下,不确定。如果您想将此移到聊天室,可能更容易跟上。马特·瑞安:就像我说的,从包含所有必要信息的远程回购中退出。