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

时间:2016-02-11 18:38:37

标签: git msysgit

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

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

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

来自another question的引文:

  

core.trustctime设置为false会使git忽略对ctime的虚假更改,这显然发生在某些文件系统上。我需要相反的行为:即使mtime没有改变,也要重新计算文件哈希。

2 个答案:

答案 0 :(得分:5)

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

您可以尝试此操作(阅读下面的警告后):

rm -f .git/index
git reset HEAD

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

Git将在HEAD时恢复统计信息(即重做整个文件比较),因此这是告诉Git“现在忘记统计信息”的解决方案,在您破坏统计信息后运行,但这并不是告诉Git“永远不再使用统计信息”的方法。

答案 1 :(得分:2)

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

执行此操作