git fsck报告“sha1不匹配”

运行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提供).

我做了以下观察:

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

到目前为止的假设:

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

我们怎么解决这个问题?

最佳答案 它一定是某种硬件问题.

点赞