回答
那麼我會冒險猜測它使用stat()
調用的組合來計算看起來可能已經改變了什麼,然後反過來實際上使用它的差異引擎來確定是否確實如此。
你可以看到差異引擎here的代碼來得到一些想法。我追溯了代碼庫,以確保狀態命令確實調用了這個代碼(看起來像很多東西!),實際上,當你知道Git在Windows上執行得非常糟糕時,這一切都很有意義它使用仿真層來執行這些POSIX類型的調用:在該平臺上執行git status
的速度要慢一個數量級。
無論如何,缺少從上到下閱讀所有的代碼(如果我有時間的話,我可能會遲一些!),就我現在可以帶你...也許有人可以是更明確的,如果他們已經工作與代碼庫。
注意:另一種可能的加速來自於明智地使用inline
函數,您可以在頭文件中清楚地看到它。
[編輯:見here爲stat()
解釋]
根據平臺,您應該能夠找出Git使用哪些系統調用來確定其狀態。嘗試在Linux上使用strace git status
,在SunOS上使用truss git status
,或者在Mac OS X上使用開發人員工具看似基於DTrace的工具。
Git努力從lstat()值中確信工作樹匹配索引,因爲回落文件內容非常昂貴。
Documentation/technical/racy-git.txt描述了什麼樣的stat字段被使用,以及如何避免一些由於低mtime粒度造成的競爭條件。 This article has some more detail。
stat值不防篡改,請參閱futimens(3)。 Git可能會被愚弄到丟失對文件的更改;這不會損害內容散列的完整性。
但是每個提交都會回退到文件內容上嗎?還是在猜測,即使在提交? – Pacerier 2014-10-20 10:54:25
- 1. 檢查文件是否已被修改
- 2. 檢測ObservableCollection是否已被修改
- 3. 防止在git上修改被修改的文件被修改
- 4. 如何檢測文件已被刪除
- 5. 如何檢查文件是否已被修改在c#
- 6. git如何檢測Windows上的修改文件?
- 7. 如何檢測桌面應用程序是否已被修改?
- 8. 如何檢測未被簽入的修改過的文件?
- 9. 檢測文件的修改
- 10. Git搜索一個文件已被修改的提交
- 11. git說文件已被修改,但我沒有觸及他們
- 12. SVN說文件夾已被修改
- 13. 該文件*已被修改SHAREPOINT \系統
- 14. 如何檢查生成的文件在Eclipse插件開發中已被修改?
- 15. 如何忽略Git中已修改的配置文件
- 16. 頁面檢查報告說,外部文件已被修改
- 17. 檢查文本部件是否已被修改
- 18. 測試JavaScript是否已被修改
- 19. 檢查字段是否已被修改
- 20. 檢查位圖是否已被修改
- 21. 檢查網頁是否已被修改
- 22. XtraGrid已被修改
- 23. 如何檢測新文件或修改文件
- 24. 如何檢查覈心文件是否已被修改或不在magento中?
- 25. 實體框架6 - DataServiceContext檢測也已經被修改
- 26. Symfony2:如何更新源文件已被修改的包?
- 27. 框 - 如何判斷根文件夾是否已被修改?
- 28. 檢測Git中文件的更改
- 29. 檢測文件更改 - 修補系統
- 30. 使用install4j檢測文件修改
對於不同的平臺可能會有所不同。我特別感興趣的是Git/Windows怎麼做 – Pacerier 2014-10-20 10:53:40