有没有比git diff-files更快的git管道?

时间:2014-02-11 20:42:20

标签: performance git

我不确定是否有这样的事情,但是

$ time git diff-files --quiet
real    0m0.495s
user    0m0.000s
sys     0m0.000s

虽然我认为它的速度非常快(SHA-1对磁盘上所有3680个跟踪文件进行哈希处理?),但它会更快一些。你知道更快的方式吗?

编辑:我的i7在工作时比我家里的i5快3.7倍。这是预料之中的吗?在i7上设置的指令是否包含使SHA-1像风一样的指令?

2 个答案:

答案 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()跳过第一步并且只执行哈希比较,对速度有明显影响。