执行 git 深度扫描以比较文件的真实性
Perform git deep scan in order to compare files for real
如何使 msysgit
扫描文件以进行真正的更改?
目前它似乎依赖于文件时间戳,因此它会出错:显示没有差异。
我尝试了 git update-index --refresh
和 git 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".
的方法
如何使 msysgit
扫描文件以进行真正的更改?
目前它似乎依赖于文件时间戳,因此它会出错:显示没有差异。
我尝试了 git update-index --refresh
和 git update-index --really-refresh
。这两个命令都会立即退出,并且似乎不会对树中的每个文件执行扫描和二进制比较。
来自 another question 的引用:
Setting
core.trustctime
tofalse
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".