git错误 - 无法推送到GitHub - pack-objects因信号9而终止

37

我把一些文件添加到代码库中,进行了提交,并尝试将其推送到Github:

$ git add .  
$ git commit -m 'bla'  
$ git push origin master

当我尝试推送到Github时,出现了一个错误。

Counting objects: 84, done.  
Delta compression using up to 2 threads.  
error: pack-objects died of signal 9  
error: failed to push some refs to 'git@github.com:xxxxx/xxxxx.git'

我两周前休假前一切正常,据我所知在此期间没有任何变化。配置文件似乎也没问题。git push -f命令执行后还是会出现以上相同的错误。


什么意思?SSH密钥?它之前一直正常工作。如果几周没有使用,那会“过期”吗? - Michelle Williamson
1
或者你现在有一些大文件了吗?https://dev59.com/A2sz5IYBdhLWcg3wTmCr - doctorlove
已经设置好了。我用了几个月,没有出现任何问题。 - Michelle Williamson
1
听起来你似乎遭到了OOM killer的攻击。 - torek
3
事实证明,@doctorlove是正确的。添加了一个101兆错误日志。显然,我已经将error_log添加到.gitignore中,但从git缓存中没有删除它,所以它仍然被跟踪。在我度假期间,显然该日志超过了允许文件大小的100兆限制。 - Michelle Williamson
显示剩余4条评论
8个回答

66

试试这个:

git config --global pack.windowMemory "32m"
pack.windowMemory::
    The maximum size of memory that is consumed by each thread
    in linkgit:git-pack-objects[1] for pack window memory when
    no limit is given on the command line.  The value can be
    suffixed with "k", "m", or "g".  When left unconfigured (or
    set explicitly to 0), there will be no limit.

在 Cloud 9 免费工作区遇到了这个问题... 运行这个命令解决了! - NiRUS
在新构建的从svn到git的转换中,运行命令“git repack -a -d -f --window=250 --depth=250”后,pack-objects死亡信号952,这个修复很好。谢谢! - James Eby
2
无论是这个命令还是 git config --global pack.windowMemory "4096m" 对我都没有任何影响。 - Sridhar Sarnobat
这解决了我在一个用于测试的微型AWS t4g.nano实例上遇到的问题。 - paradroid

15

Git repack 将未打包的对象组织成 pack,pack 是一组单独压缩,并应用 delta 压缩的对象集合,存储在单个文件中,并带有关联的索引文件。

    git repack -a -d -f --window=0
  • a: 将所有内容打包到一个单一的包中
  • d: 删除任何新的冗余包
  • f: 不重用旧的增量,可能是为了降低内存需求
  • window=0: 停止与其他对象的比较,尝试节省空间,也可能是为了降低内存需求

7
请查看如何撰写优质回答,并考虑在您的代码与答案之间提供一些解释,以便未来的用户更容易地了解您的思路和代码。- 来自审阅 - HansHirse
这似乎对我的臃肿仓库有效,不像最流行的答案。 - Sridhar Sarnobat
请复制并粘贴以下网址中与本文相关的内容:https://git-scm.com/docs/git-repack(但这将使得文章变得很长)。 - Sridhar Sarnobat
更正:这对我的大小没有影响,尽管命令已成功完成。 - Sridhar Sarnobat
我已经对答案做了一些解释(所以现在得到了应得的负评-糟糕),但我认为这并没有真正解决问题,它只是重新尝试了失败的打包操作,并设置尝试使用更少的内存。 - Chris

3
在一台内存配置较小的FreeBSD服务器上,使用一个文件数量很多的大型代码仓库时,出现了以下错误。在/var/log/messages文件中记录了如下错误信息:
pid 93208 (git), jid 0, uid 1001, was killed: out of swap space

我通过临时 添加一些交换空间,成功解决了这个问题。


1
我很确定你有一个本地问题,与GitHub无关。git push包括以下步骤:
  • 本地:对象的增量压缩
  • 网络:通过SSH将新的压缩对象写入远程存储库
  • 网络:通过SSH更新远程存储库中的引用
很明显,第一步失败了。你可能没有足够的内存/交换空间?

0
你的~/.git-support/hooks/目录中有什么东西吗?或者你的仓库的.git/hooks目录中有什么东西吗?特别是名为pre-push的文件?
如果有的话,可能是因为在pre-push Git钩子运行期间出现了错误。尝试将文件重命名,以便不执行它。重新启动终端,然后再次尝试提交。

0
在我的情况下,是因为我想添加的文件数量超过了100个。如果这也是你的问题,你可能需要将它们分成不同的提交。
另一个解释是你想要推送的文件太大了。

0
请检查RAM使用情况,或为swap文件创建更多空间。

-9

在推送到 Gitlab 时遇到了这个问题。

通过将 .* 添加到我的 .gitignore 中解决了这个问题。

即忽略所有以 . 开头的文件/文件夹,例如 .git


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