Git缺少blob并不是真的缺少
一位同事向我展示了其裸存储库的一个问题
git fsck --full
error: corrupt loose object 'e82fe20e35ac4cda5dad3369abf3984d6280224d'
error: unable to unpack contents of
./objects/e8/2fe20e35ac4cda5dad3369abf3984d6280224d
error: e82fe20e35ac4cda5dad3369abf3984d6280224d: object corrupt or missing:
./objects/e8/2fe20e35ac4cda5dad3369abf3984d6280224d
Checking object directories: 100% (256/256), done.
Checking objects: 100% (5451/5451), done.
dangling blob ca82c960c8e2be046bac1b172cef6a8e14142d53
dangling blob a308c3c7ba71d04477768ff7a6c2c4ea1d9d1c3c
dangling commit d0cbfeada696c5e2686b3a9831a8fdb832675b79
dangling blob 8b92c1a1c85088043dff200ce42a4f7bf543f9b0
dangling commit 3d930dc778c0aabef397063a60d58dcbba7dd094
dangling blob 2c2159b5181c4b3c3ab5ed0216726f6d9bf9a04f
dangling blob 732d6bde83d2605aa9e9872a90d89482fd03662e
missing blob e82fe20e35ac4cda5dad3369abf3984d6280224d
dangling blob 2b70f7cc74ffed4fa51b8630ac9afafafd1d3853
dangling blob 2479f96766eecc50420b36b64ed9746f0f26eee8
dangling blob 64fb11950ff0def78d5b38b34c0a8e5bbc48942f
奇怪的是文件在那里:
ls -al objects/e8/2fe20e35ac4cda5dad3369abf3984d6280224d
-rw-r--r-- 1 root root 9809893 Feb 16 22:43 objects/e8/2fe20e35ac4cda5dad3369abf3984d6280224d
当我尝试从我的同事那里获取原始文件时,我得到了正确的哈希值:
git hash-object -w foo.pdf
e82fe20e35ac4cda5dad3369abf3984d6280224d
为什么 Git 仍然抱怨这个丢失的 blob 以及如何修复它?
编辑
似乎内容./objects/e8/2fe20e35ac4cda5dad3369abf3984d6280224d
不是 zlib 文件。当我尝试给它充气时出现错误。
所以我使用rm
了对象并重新生成了对象hash-object -w
。这次一切都很好。我保存了存储库。
然而,我不明白这是怎么回事。这两个 blob 非常不同,一个看起来像 PDF,另一个显然什么都没有:
回答
error: e82fe20e35ac4cda5dad3369abf3984d6280224d: object corrupt or missing:
./objects/e8/2fe20e35ac4cda5dad3369abf3984d6280224d
“对象损坏或丢失”。文件在那里,但它的校验和与文件名不匹配。
当我尝试从我的同事那里获取原始文件时,我得到了正确的哈希值
您同事文件的校验和与其文件名匹配。
如何解决?
将您同事的文件复制到您的存储库。
然而,我不明白这是怎么回事。
它是磁盘上的一个文件,任何数量的事情都可能发生。磁盘错误。一个过分热心的反病毒软件。Git 中的一个错误。
一个主要的罪魁祸首是您的存储库是否位于任何类型的共享驱动器上,例如 Dropbox。Git 存储库不能在共享驱动器上安全使用。
- 在您的磁盘上运行检查。
- 确保 Git 是最新的。
- 检查您的防病毒软件是否试图保护您免受 Git 存储库的侵害。
- 将您的存储库移出共享驱动器。
- 如果您的存储库在 Dropbox 上,请使用
git-remote-dropbox
.