检查 git 存储库的完整性

Kla*_*aus 4 git

当我的磁盘在访问 git 存储库时报告了一长串“不可恢复的读取错误”后,我担心我对其他存储库进行了一些推送,这些存储库可能会将错误的内容转发给它们。顺便说一句,在使用提交/推/拉访问存储库时,没有任何 git 命令报告任何错误。但是在访问存储库后​​,我总是会收到dmesg磁盘上出现不可恢复的读取错误的新条目。所以肯定有一些文件受到影响,但可能内容是多余的。

我知道:

git fsck --full 
Run Code Online (Sandbox Code Playgroud)

将检查回购协议,但我想问:

没有报告任何错误(也许一些悬空提交/斑点在我读到时并不重要)意味着完整的存储库处于有效状态?特别是不仅引用和文件存在,而且所有文件的内容都有效?我找不到的是,有类似校验和的东西可以验证 git 数据库中存储的所有对象的完整内容。

Sch*_*ern 5

没有报告任何错误(也许一些悬空提交/斑点在我读到时并不重要)意味着完整的存储库处于有效状态?

是的。git fsck --full--full默认情况下)检查所有对象及其连接。

特别是不仅引用和文件存在,而且所有文件的内容都有效?我找不到的是,有类似校验和的东西可以验证 git 数据库中存储的所有对象的完整内容。

Git 已经内置了校验和。

Git 中的一切都是对象。每个对象都有一个 ID。ID 是内容和连接的校验和。如果内容或连接发生变化,则 ID 不再有效。

例如,提交 ID 基本上是...的校验和

  • 提交时所有文件(git 称之为“blob”)的内容和权限(它们有自己的 ID)。
  • 提交的字段,如作者、日期、日志消息等......
  • 父提交的提交 ID。

如果其中任何一个发生变化,ID/校验和将不再有效。这是一个非常优雅的系统。

如果该磁盘仍然出现错误,您确实应该更换该磁盘。

  • “你真的应该更换那个磁盘。” 非常清楚;) 简单地停产!但我没有识别出磁盘错误,因为只有访问时间增加,但使用 git 没有显示错误。只有 dmesg 显示问题...但我会把磁盘扔掉,数据比 1TB 磁盘贵得多:-) 感谢您的回答! (2认同)