执行 git 深度扫描以比较文件的真实性

Perform git deep scan in order to compare files for real

如何使 msysgit 扫描文件以进行真正的更改?

目前它似乎依赖于文件时间戳,因此它会出错:显示没有差异。

我尝试了 git update-index --refreshgit update-index --really-refresh。这两个命令都会立即退出,并且似乎不会对树中的每个文件执行扫描和二进制比较。

来自 another question 的引用:

Setting core.trustctime to false makes git ignore spurious changes to ctime, which apparently happens on some file systems. I need the opposite behavior: re-computing the file hash even when mtime hasn't changed.

您可以做的一件事是将所有文件的时间戳更新为当前时间;你可以用 find . -exec touch {} \;

首先,您应该尝试找到问题的根源。 Git 对统计信息(不仅是时间戳,还有大小)的使用通常非常可靠。如果您遇到问题,很可能意味着您的系统出现严重损坏。 Git 将不是唯一被破坏的工具(您的备份系统和构建系统很可能也是)。

你可以试试这个(在阅读下面的警告之后):

rm -f .git/index
git reset HEAD

rm 命令显然会丢弃索引中的任何信息,即:Git 在内部使用的所有统计信息,以避免比较文件(你期望的),以及任何 git add, git reset, 有关您可能在索引中未提交的未合并文件的信息。另一方面,这不会更改任何提交的信息。 git reset HEAD 命令将创建一个匹配 HEAD 的新索引,即在此命令之后,Git 认为您没有在索引中暂存更改。

Git会恢复git reset HEAD时的stat信息(即重做整个文件比较),所以这个解决方案告诉Git"forget stat information now" , 在你打破你的统计信息后 运行 ,但这不是告诉 Git "never use stat information again".

的方法