注意:我没有此存储库的任何损坏前克隆。我相信我的情况与这里描述的其他人不同,因为我缺少一棵树,而不是一团。
发生了什么:
当我尝试通过 LAN(通过 SSH)克隆存储库时,Git 返回一个错误,指出存储库已损坏:
remote: error: object file ./objects/2e/223ce259e9e33998d434acc778bc64b393d5d4 is empty
remote: fatal: loose object 2e223ce259e9e33998d434acc778bc64b393d5d4 (stored in ./objects/2e/223ce259e9e33998d434acc778bc64b393d5d4) is corrupt
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
我找到了git fsck
可以用来诊断腐败的地方,但它没有告诉我任何新信息:
git fsck --full
error: object file ./objects/2e/223ce259e9e33998d434acc778bc64b393d5d4 is empty
fatal: loose object 2e223ce259e9e33998d434acc778bc64b393d5d4 (stored in ./objects/2e/223ce259e9e33998d434acc778bc64b393d5d4) is corrupt
我尝试在本地(使用--no-hardlinks
)克隆存储库以查看会发生什么,但我得到了完全相同的结果。
然后我偶然发现了这个问题,回答的人刚刚删除了空文件(第 3 步),所以我这样做了(即我已经223ce259e9e33998d434acc778bc64b393d5d4
从子目录中删除了文件objects/2e/
)。
git fsck
再次,我看到:
Checking object directories: 100% (256/256), done.
broken link from tree 838e437f371c652fa4393d25473ce21cbf697d7a
to tree 2e223ce259e9e33998d434acc778bc64b393d5d4
dangling commit 54146bc0dc4eb3eede82a0405b749e05c11c5522
missing tree 2e223ce259e9e33998d434acc778bc64b393d5d4
dangling commit 864864feec207786b84158e526b2faec7799fd4e
dangling blob d3cfd7cc7718d5b76df70cf9865db01c25181bfb
所以,现在 tree 有问题了838e437f37
。上面提到的那个人不是这样的,所以我去谷歌搜索了一下,从 Linus 那里找到了一些信息。
所以,我做到了git ls-tree 838e437f371c652fa4393d25473ce21cbf697d7a
,在输出中有一行阅读:
040000 tree 2e223ce259e9e33998d434acc778bc64b393d5d4 moje
现在,“moje”是一个目录(与 Linus 解释的示例不同,它是一个文件)。我想这就是 Linus 建议的下一步,git hash-object moje
返回的原因fatal: Unable to hash moje
。
但无论如何,它只是我需要的机会很小,所以我继续寻找。我跑了git log --raw --all --full-history -- moje/
,根据 Linus 的指南,应该有一个提交将 2e223 列为某些内容的 SHA-2 哈希,但没有。列表以
fatal: unable to read source tree (2e223ce259e9e33998d434acc778bc64b393d5d4)
我尝试查看在该错误之前列出的最后一次提交,但我没有找到这个哈希值。我见过这个,但它对我没有帮助,可能是因为有问题的版本和工作树的当前状态之间存在一些变化。
有一件事可能很重要:里面moje/
有一个目录cli/
,它本身就是一个 Git 存储库(一个子模块)。我在那里寻找有问题的 SHA-2 哈希,但没有找到。
我该怎么办?