尝试确定在git-1.7.4.1中用户收到有关对象数据库损坏警告的快速程度,我进行了一次一位比特的切换:
$ git init repo 在 /tmp/repo/.git/ 中初始化 Git 空仓库。 $ cd repo $ echo '非常重要的信息' >critical $ git add critical $ git commit -m "非常重要" [master(根提交)c4d6d90] 非常重要 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 critical $ git ls-tree HEAD 100644 blob 82d423c32c4bb2c52938088e0234db041bf4eaaf critical $ git show 82d423c32c4bb2c52938088e0234db041bf4eaaf 非常重要的信息 $ echo '非常重要的信息' | git hash-object --stdin -w 81a3797afe76d339db25c0f9c705a6caa47279c2 $ mv .git/objects/81/a3797afe76d339db25c0f9c705a6caa47279c2 \ .git/objects/82/d423c32c4bb2c52938088e0234db041bf4eaaf
当然,git-fsck
注意到了:
$ git fsck error: sha1 mismatch 82d423c32c4bb2c52938088e0234db041bf4eaaf
error: 82d423c32c4bb2c52938088e0234db041bf4eaaf: object corrupt or missing missing blob 82d423c32c4bb2c52938088e0234db041bf4eaaf
但是,git-log
对更改感到满意:
$ git log -p commit c4d6d90467af9ffa94772795d5c5d191228933c1 Author: Greg Bacon <gbacon@dbresearch.net> Date: Thu Apr 7 12:20:53 2011 -0500diff --git a/critical b/critical 新文件模式100644 索引0000000..82d423c --- /dev/null +++ b/critical @@ -0,0 +1 @@ +非常重要的信息
非常重要
和 git-checkout
一样。
$ rm critical $ git checkout . $ cat critical 非常重要的信息
git-show
的特定调用会显示损坏信息:
$ git show 82d423c32c4bb2c52938088e0234db041bf4eaaf error: sha1不匹配 82d423c32c4bb2c52938088e0234db041bf4eaaf
fatal: 错误对象82d423c32c4bb2c52938088e0234db041bf4eaaf
但是广泛应用没有注意到.
$ git show 提交c4d6d90467af9ffa94772795d5c5d191228933c1 作者: Greg Bacon <gbacon@dbresearch.net> 日期:2011年4月7日星期四12:20:53 -0500
非常重要的信息
diff --git a/critical b/critical 新文件模式100644 索引0000000..82d423c --- /dev/null +++ b/critical @@ -0,0 +1 @@ +非常重要的信息
甚至git-clone
也没有注意到!
$ cd .. $ git clone repo clone 克隆到“clone”…… 完成。 $ cat clone/critical 非常重要的信息
请问有哪些特定的git命令模式(例如,应该存在git show $sha1
但不存在git show
或git show HEAD
),它们执行完整性检查?
git fsck
。此外,最好发送一封电子邮件,说明“我们已经恢复了中央仓库。'master'位于<SHA1>,'release'位于<SHA1>”,以确保每个人的克隆都是一致的。 - Tyler