我试图将今天的更改推送到远程存储库,我收到以下错误:
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
有什么问题?
答案 0 :(得分:3)
此错误:
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-和架构因此,ARM上的Linux,MIPS或SPARC的行为与x86上的相同版本的Linux的行为不同。似乎无论是什么导致Git无法读取存储在存储库中的对象都会导致Git的后续崩溃,但是Git - 或者至少git fsck
- 不是 崩溃由于存储库错误。特别是使用git fsck
假设来诊断错误存储库中的错误。无论如何,在打开目录时获取EINTR
是不寻常的,至少是这样。
如果文件 非本地(通过网络找到),您可以将它们移动到本地(磁盘上)存储,看看是否至少会使问题消失。这不是"修复"这个错误就像简单地避免"它,但如果那就够了....: - )
1 这可能不的一个明显路径是文件或目录是否存储在本地磁盘上,而是存储在网络上,例如就像在AFP服务器上一样。
2 这些名称长度仅为38个字符,在删除前导14
后,为剩余部分提供了哈希ID。它们位于14
。{/ p>这一事实隐含着.git/objects/14/