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/
.
中
我今天试图将我的更改推送到远程存储库,但出现以下错误:
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/
.