![git 如何注意到 repo 的内容发生了变化?](https://linux22.com/image/1517530/git%20%E5%A6%82%E4%BD%95%E6%B3%A8%E6%84%8F%E5%88%B0%20repo%20%E7%9A%84%E5%86%85%E5%AE%B9%E5%8F%91%E7%94%9F%E4%BA%86%E5%8F%98%E5%8C%96%EF%BC%9F.png)
如果您修改了之前干净的文件,git 会注意到。即使您将该文件的修改数据恢复到以前的状态,它也会注意到。但是 git 不会读取工作目录中所有跟踪文件的数据。它做不到,因为那太快了。我的存储库大小达数 GB,速度git status
超快,快到无法读取存储库中的所有数据。
- git 是如何做到这一点的?
- 如何让 git 检查每个跟踪文件的内容,以验证它们自上次提交以来没有被损坏?最好不要在不同位置检查 repo 的内容,也不要向 diff 工具询问工作目录中可能存在的差异。
为了更好地理解不可能发生的事情(排除一些选项),我进行了以下实验:我在一个文件中创建了一个文件系统,并将我的文档存储库(3 GB 的跟踪文件)复制到那里。然后,我卸载它,在十六进制编辑器中打开存储文件系统的文件,搜索单词“regardless”,并将其替换为单词“relentless”(需要相同数量的存储空间,这样我就不会弄乱布局)。
然后我再次挂载文件系统,果然,git 没有注意到任何变化。我打开文件并搜索单词“relentless”,以确保我所做的更改被跟踪。实际上,第一次我在备份文件 ( *~
file) 中换出了这个词,我没有跟踪它们。但第二次更改发生在跟踪的文件中。
即使在我查看了文件之后(因此它们的访问时间戳已更改),git 也没有注意到这一变化。如果这是由于宇宙射线击中我的硬盘并将此事件中的“regardless”一词更改为“relentless”而导致的损坏,我该如何让 git 注意到这一点?