检查git仓库的完整性

问题描述 投票:1回答:1

在我访问git repo时,我有一个报告了一长串“不可恢复的读取错误”的磁盘后,我担心我会对其他可能转发错误内容的其他回购进行推送。 BTW非git命令在使用commit / push / pull访问repo时报告了任何错误。但是在访问了repo之后,我总是在dmesg中新出现了磁盘上不可恢复的读取错误。因此必须有一些文件受影响,但可能内容是多余的。

我知道:

git fsck --full 

将检查回购,但我想问:

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

git
1个回答
2
投票

没有报告任何错误(可能有些悬空提交/ blob在我阅读时并不重要)意味着完整的回购是否处于有效状态?

是。 git fsck --full(和--full是默认值)检查所有对象及其连接。

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

Git已经将校验和放入其中。

Git中的所有东西都是一个对象。每个对象都有一个ID。 ID是内容和连接的校验和。如果内容或连接发生更改,则ID不再有效。

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

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

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

如果该磁盘仍然给你错误,你真的应该替换那个磁盘。

© www.soinside.com 2019 - 2024. All rights reserved.