Git 缺少 blob 并不是真的缺少

时间:2021-02-16 21:56:47

标签: git

一位同事向我展示了其裸仓库的一个问题

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,另一个显然什么都不是:

enter image description here

1 个答案:

答案 0 :(得分:6)

error: e82fe20e35ac4cda5dad3369abf3984d6280224d: object corrupt or missing: 
    ./objects/e8/2fe20e35ac4cda5dad3369abf3984d6280224d

“对象损坏或丢失”。文件在那里,但它的校验和与文件名不匹配。

<块引用>

当我尝试从我的同事那里获取原始文件时,我得到了正确的哈希

您同事文件的校验和与其文件名匹配。

<块引用>

如何解决?

将您同事的文件复制到您的存储库。

<块引用>

但是,我不明白发生了什么。

它是磁盘上的一个文件,任何数量的事情都可能发生。磁盘错误。一个过度热心的反病毒。 Git 中的一个错误。

一个主要的罪魁祸首是您的存储库是否位于任何类型的共享驱动器上,例如 Dropbox。无法在共享驱动器上安全地使用 Git 存储库。

  • 检查您的磁盘。
  • 确保 Git 是最新的。
  • 检查您的防病毒软件没有尝试保护您免受 Git 存储库的侵害。
  • 将您的存储库移出共享驱动器。
  • 如果您的存储库位于 Dropbox,请使用 git-remote-dropbox
相关问题