我不知道是否有這樣的事情,但是否有任何git管道比git diff-files更快?
$ time git diff-files --quiet
real 0m0.495s
user 0m0.000s
sys 0m0.000s
,雖然我認爲它的速度極快(SHA-1散列所有3680跟蹤的磁盤上的文件?),這將是有一件好事甚至更快。你知道更快的方法嗎?
編輯:我在工作中的i7比我家裏的i5快3.7倍。這是預期的嗎? i7上的指令是否包含使SHA-1像風一樣的指令?
我不知道是否有這樣的事情,但是否有任何git管道比git diff-files更快?
$ time git diff-files --quiet
real 0m0.495s
user 0m0.000s
sys 0m0.000s
,雖然我認爲它的速度極快(SHA-1散列所有3680跟蹤的磁盤上的文件?),這將是有一件好事甚至更快。你知道更快的方法嗎?
編輯:我在工作中的i7比我家裏的i5快3.7倍。這是預期的嗎? i7上的指令是否包含使SHA-1像風一樣的指令?
git diff-files
默認情況下不會計算工作副本中每個文件的散列值。該索引包含時間戳的副本以及上一次文件爲git add
(或git update-index
或其他涉及將索引中的文件記錄的其他操作)的一些其他元數據。作爲第一步,將當前文件的元數據與索引中的副本進行比較,如果它們相同,則假定文件未被更改並且不計算哈希。如果元數據不同,那麼它執行更昂貴的操作來查看文件是否實際上不同 - 計算散列。根據諸如assume-unchanged
屬性之類的內容,整個畫面實際上比這更復雜,但這是正常的流程概覽。還有一個配置選項core.ignoreStat
可以設置 - 主要針對文件系統,其中stat()
是不可靠/不準確的 - 強制git
跳過第一步,只做哈希比較,對速度有明顯影響。
如果有一個更快的方法做爲此,它應該已經在git diff-files
...我非常多懷疑它是SHA-256-ING您的文件,這將需要更長的時間(你可以計時像cat $(git ls-files) | sha256
想知道這麼做需要多少時間)。
如果您在這個任務背景上點亮一些信息會很有幫助 – zerkms
不,但這很有趣,不是嗎?我正在使用它來生成一個很好的bash提示符。像[so](http://lazybones-git.blogspot.se/2011/04/gitifying-da-prompt.html)。 –
'git diff-files'不會計算磁盤上每個文件的散列值。它正在比較'stat()'info(時間戳,尤其是)與已經存儲在索引中的時間戳。只有這些不同,它纔會考慮檢查哈希。除非你啓用了'core.ignoreStat',不管怎樣... – twalberg