没有967号信号,但有is信号编号 9,即SIGKILL
在 Linux 和 Unix 系统上。我认为有东西打印了一行以67
,然后回车,然后是您本地的git pack-objects
被“OOM杀手”击中了。
你需要做的就是给你的Linux系统(这是your系统,而不是您要推送的系统)更多内存,或推送较小的提交(或两者兼而有之)。在这种情况下,“内存”可以是真实的物理 RAM 或虚拟内存:系统可以将占用内存的大多数空闲程序中的空闲内存内容写入交换空间。要获得更多的物理内存,当然可以安装更多的DRAM芯片;或者您可以退出任何不需要继续运行的占用内存的程序。
您还可以调整 Git 的内存使用设置,以便使用更少的内存来进行对象压缩,但通常没有充分的理由这样做(除非您有一个非常旧的 Git 版本:较新的版本检测到巨大的二进制文件并且甚至不attempt来压缩它们)。
Details
当 Git 进行推送时,您通常会看到这些:
Counting objects: nnnnn, done.
and:
Compressing objects: nn% (mmmmm/nnnnn)
进度消息,让您放心,Git 实际上正在做一些事情,否则这可能看起来是一个很长的停顿。这些来自git pack-objects
, which git push
运行以生成 Git 所称的薄包装,发送到您要推送数据的另一个 Git。
你的 Git 实际上完成了“计数对象”阶段,并进入了“压缩对象”阶段,该阶段更加占用内存。
So, git pack-objects
正在愉快地打印进度线:
Compressing objects: xx% (xxxxx/xxx69)
每次打印输出后,它将光标发送回行首,以便下一行覆盖前一行,最终会显示“100% (nnnnn/nnnnn),完成”。 (一旦到达该点,它就会打印换行符,而不仅仅是回车符。)
遗憾的是,此时 Linux(或者您正在使用的任何系统)认为太多程序使用了太多内存,并选择了git pack-objects
作为“内存不足”杀戮的受害者。它杀掉了git pack-objects
with SIGKILL
,信号 9。
这使得你的推送打印如下:
error: pack-objects died of signal 9
在上一个进度线的顶部,留下:
error: pack-objects died of signal 967)
(注:我不知道所有的数字是什么x
-s 是,除了它们必须以67
。错误信息是not前缀为remote:
, but should结束于signal 967)
——即带有右括号的字符串——而不仅仅是signal 967
.)
OOM 杀手意味着您的系统内存不足。事实是它选择了git pack-objects
作为其受害者并不一定意味着git pack-objects
本身就是reason你的系统内存不足。这只是系统在满溢的鱼缸里看到的最大的一条鱼。 Linux 选择取出那一条,而不是取出 5 条较小的鱼。