2014-02-11 73 views
0

我不知道是否有這樣的事情,但是否有任何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像風一樣的指令?

+0

如果您在這個任務背景上點亮一些信息會很有幫助 – zerkms

+0

不,但這很有趣,不是嗎?我正在使用它來生成一個很好的bash提示符。像[so](http://lazybones-git.blogspot.se/2011/04/gitifying-da-prompt.html)。 –

+1

'git diff-files'不會計算磁盤上每個文件的散列值。它正在比較'stat()'info(時間戳,尤其是)與已經存儲在索引中的時間戳。只有這些不同,它纔會考慮檢查哈希。除非你啓用了'core.ignoreStat',不管怎樣... – twalberg

回答

1

git diff-files默認情況下不會計算工作副本中每個文件的散列值。該索引包含時間戳的副本以及上一次文件爲git add(或git update-index或其他涉及將索引中的文件記錄的其他操作)的一些其他元數據。作爲第一步,將當前文件的元數據與索引中的副本進行比較,如果它們相同,則假定文件未被更改並且不計算哈希。如果元數據不同,那麼它執行更昂貴的操作來查看文件是否實際上不同 - 計算散列。根據諸如assume-unchanged屬性之類的內容,整個畫面實際上比這更復雜,但這是正常的流程概覽。還有一個配置選項core.ignoreStat可以設置 - 主要針對文件系統,其中stat()是不可靠/不準確的 - 強制git跳過第一步,只做哈希比較,對速度有明顯影響。

1

如果有一個更快的方法做爲此,它應該已經在git diff-files ...我非常多懷疑它是SHA-256-ING您的文件,這將需要更長的時間(你可以計時像cat $(git ls-files) | sha256想知道這麼做需要多少時間)。

相關問題