這是關於git
的內部結構。git使用什麼算法來檢測工作樹上的更改?
我一直在閱讀偉大的'Pro Git'書籍並瞭解git在內部如何工作(所有關於SHA1,blob,引用,tress,提交等等)。順便說一下,非常聰明的建築。
因此,爲了放入上下文,git將文件的內容作爲SHA1值引用,因此它能夠知道特定內容是否僅僅比較了散列值而發生了變化。但我的問題是關於git如何檢查工作樹中的內容是否已經改變。
天真的方法會認爲,每次運行命令git status
或類似的命令時,它都將搜索工作目錄中的所有文件,計算SHA1並將其與具有上次提交的文件進行比較。但是對於大型項目來說,這看起來效率很低,就像Linux內核一樣。
另一個想法可能是檢查的最後修改日期的文件,但我認爲Git是不存儲該信息(當你克隆一個倉庫,所有的文件有一個新的時間)
我敢肯定,這以一種有效的方式做(git非常快),是否有人如何實現?
PD:只是爲了添加一個有趣的link關於git索引,特別指出索引保留有關文件時間戳的信息,即使樹對象不包含。
請參閱:http://stackoverflow.com/questions/1778862/how-does-git-detect-a-file-modification – 2011-02-14 17:18:31
[git如何檢測文件已被修改?](http:// stackoverflow .com/q/1778862/995714) – 2017-04-21 08:45:46