GIT 包对象死于信号 10

GIT pack objects died of signal 10

我今天试图将我的更改推送到远程存储库,但出现以下错误:

git push -u origin master
error: pack-objects died of signal 10

昨天提交和推送工作正常,设置没有更改,没有其他人提交或推送到存储库,提交也不大,大约 10 个文件。

我正在使用 MacOS Sierra - git 版本 2.9.3(Apple Git-75), 存储库是 GitLab 8.13.5 (Git 2.7.4)

整个存储库只有 33MB,因此没有包含大文件(甚至在提交中也不包含)。我正在使用 SSH 访问存储库。

git config pack.threads 1没有效果。

我也试过将远程克隆到新位置,编辑一个文件,提交,推送并且成功了,所以问题应该出在特定的提交上。

运行 git fsck 导致相同的错误:

git fsck
error: unable to open .git/objects/14: Interrupted system call
Checking object directories: 100% (256/256), done.
Bus error: 10

问题是什么?

这个错误:

error: unable to open .git/objects/14: Interrupted system call

比较神秘。这应该是一个目录,git fsck应该能够打开它而不被中断。1你可能运行:

ls -ld .git/objects/14

验证它一个目录,如果是,ls -l .git/objects/14看看里面有什么(它应该包含零个或多个散列ID为姓名2).

SIGBUS 表示 Git 中存在某种内部错误。 C 程序在尝试使用内存地址时会收到 SIGBUS 或 SIGSEGV,这些内存地址最初从未被授予,或者无效(请参阅 Bus error vs Segmentation fault 并注意传递哪个信号的决定都是 OS- 和体系结构相关,因此 Linux 在 ARM、MIPS 或 SPARC 上的行为与例如在 x86 上的相同版本的 Linux 不同)。似乎导致 Git 无法读取存储在存储库中的对象的任何原因都可能导致 Git 的后续崩溃,但是 Git——或者至少,git fsck不应该 崩溃 因为存储库不好。使用 git fsck 特别是 应该 来诊断什么是 错误 与一个坏的存储库。无论如何,至少在打开目录时得到 EINTR 是不寻常的。

如果文件 非本地文件(通过网络找到),您可以将它们移动到本地(磁盘上)存储并查看是否至少会导致问题走开。这不是 "fixing" 错误,而是 "avoiding" 它,但如果这就足够了.... :-)


1可能不是的一个明显路径是文件或目录未存储在本地磁盘上,而是通过网络,例如在 AFP 服务器上。

2这些名称只有 38 个字符长,在删除前导 [=17 后给出哈希 ID 的 剩余部分 =]. 14 隐含在 .git/objects/14/.