我不确定是否有这样的事情,但是
$ time git diff-files --quiet
real 0m0.495s
user 0m0.000s
sys 0m0.000s
虽然我认为它的速度非常快(SHA-1对磁盘上所有3680个跟踪文件进行哈希处理?),但它会更快一些。你知道更快的方式吗?
编辑:我的i7在工作时比我家里的i5快3.7倍。这是预料之中的吗?在i7上设置的指令是否包含使SHA-1像风一样的指令?
答案 0 :(得分:1)
如果有更快的方法可以做到这一点,那么它已经在git diff-files
...并且我非常非常怀疑它是SHA-256-ing你的文件,那就是需要更长的时间(你可以花时间cat $(git ls-files) | sha256
来了解这需要花多少时间。)
答案 1 :(得分:1)
git diff-files
不会计算工作副本中每个文件的哈希值。索引包含时间戳的副本以及上次文件git add
编辑时的一些其他元数据(或git update-index
或其他几个涉及将文件记录放在索引中的操作)。 git diff-files
,作为第一步,将当前文件的元数据与索引中的副本进行比较,如果它们相同,则假定文件尚未更改且不计算哈希值。如果元数据不同,那么它执行更昂贵的操作以查看文件是否实际上不同 - 计算散列。根据{{1}}属性等内容,实际情况实际上比这更复杂,但这是正常的流程概述。还有一个配置选项assume-unchanged
可以设置 - 主要针对core.ignoreStat
不可靠/不准确的文件系统 - 强制stat()
跳过第一步并且只执行哈希比较,对速度有明显影响。