git fsck报告“sha1不匹配”

时间:2010-08-26 15:25:33

标签: git sha1 corruption

运行git fsck --full --strict命令时出现以下问题:

error: sha1 mismatch ced885d12a0677f2db9025e1e684c72e67283fcd

error: ced885d12a0677f2db9025e1e684c72e67283fcd: object corrupt or missing
error: sha1 mismatch cf5a1546bd2de5611eaf6136fb5ca02b4e358bec

error: cf5a1546bd2de5611eaf6136fb5ca02b4e358bec: object corrupt or missing
error: sha1 mismatch cf5d9d5723014921370de479c54a73230c86a981

error: cf5d9d5723014921370de479c54a73230c86a981: object corrupt or missing
error: sha1 mismatch cf675ce5bc5eeb5937441c6a02976cf2fa40076b

error: cf675ce5bc5eeb5937441c6a02976cf2fa40076b: object corrupt or missing
error: sha1 mismatch cf7c5156cf127eb7141505946df51b2b57925a50

error: cf7c5156cf127eb7141505946df51b2b57925a50: object corrupt or missing
dangling commit 3468455f0d9d055bbe957744aa10e670469d3912
dangling commit daeec54632203157a70bae93b9d7c3290820c2f9
(more dangling commit messages)

(注意:我并不关心悬空提交消息。我关注的是sha1不匹配问题。)

我对此消息的解释是git-fsck从有效负载中重新计算sha1,但发现sha1与用于指定对象的sha1不同。存储库中没有丢失对象(我已经检查了w / git cat-file)。

奇怪的是,如果我再次运行命令,我仍然有sha1消息但是对于不同的对象:

error: sha1 mismatch 1452752024456a509540591c4879b3e3534f457e

error: 1452752024456a509540591c4879b3e3534f457e: object corrupt or missing
error: sha1 mismatch 16e08310d7182e97092d2783c911dbcf66538238

error: 16e08310d7182e97092d2783c911dbcf66538238: object corrupt or missing
dangling commit 3468455f0d9d055bbe957744aa10e670469d3912

注意:两次运行之间的存储库没有变化。

我们正在运行Linux,目前的git版本是:

$git --version
git version 1.7.2.2.170.g5c7f2

先前版本(1.6.5.rc2.18.g6d8b)中存在错误。这些git是使用gcc 3.4.4从源代码构建的。

但是,当我在另一台主机上复制存储库时,git fsck报告完全没有问题。那里的git版本是1.7.2.1(由Fedora提供)。

我做了以下观察:

  1. 具有无效sha1的对象通常在相同的范围内(在第一个示例中,sha1以ce或cf开头),并且在fsck运行期间的一小段时间内触发错误。我相信git-fsck会进行有序扫描(或者对象可以在包中进行排序)。
  2. 这些对象是相对较大的blob(> 900k)
  3. 我们为可能的硬件内存故障运行了15分钟的完整memtest通行证。我们没有发现任何问题。在此服务器上没有观察到其他奇怪的行为,这些行为也执行许多其他非git任务。
  4. git gc没有抱怨
  5. 到目前为止的假设:

    1. 此问题是由git(库版本?编译器?)
    2. 的不正确构建引起的
    3. 我们的记忆未能找到真正的记忆问题。
    4. git-fsck sha1计算中存在一个微小的错误,该错误随机发生(或者更确切地说,在某些短时间窗口内),适用于大型blob。
    5. 我们如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

一定是某种硬件问题。