(這不是How does git detect that a file has been modified?的重複,因爲我在問Windows,引用的QA提到stat
和lstat
,這些不適用於Windows)。git如何檢測Windows上的修改文件?
對於像SVN和TFS這樣的傳統系統,「狀態數據庫」需要顯式手動通知本地工作區中文件的任何更改:默認情況下文件是隻讀的,因此您不會意外進行更改而無需首先明確通知您的SVN/TFS客戶端。幸運的是,IDE集成意味着可以將導致文件的添加,修改,刪除和重命名(即「檢出」)的操作自動傳遞給客戶端。這也意味着您需要像TortoiseSVN這樣的軟件來處理Windows資源管理器中的文件,以免您的更改被忽略 - 並且您應該定期運行一個經常冗長的服務器到本地比較掃描來檢測任何更改。
但Git沒有這個問題 - 在我的Windows機器上,我可以擁有數十萬個文件的深度數十個文件的回購庫,但是如果我對一個文件進行1個字節的更改,深深地,我可以看到Git在運行git status
後知道。這是一個奇怪的部分 - 因爲git不使用任何守護進程或後臺任務 - 運行git status
也不涉及任何重要的IO活動,我可以看到,我立即得到結果,它不會甩掉我的磁盤來搜索更改我做了。另外,Git GUI工具(如Git與Visual Studio 2015的集成)也有一定程度的魔力 - 我可以在記事本或其他程序中進行更改,並且VS'Git Changes窗口立即拾取它。 VS可以簡單地使用ReadDirectoryChanges
(FileSystemWatcher
) - 但是當我在Process Explorer中查看devenv
進程時,我看不到任何相應的句柄,但這也不能解釋git status
如何看到這些更改。
這不回答我的問題。我想知道git是如何意識到我所做的更改,而沒有在我的repo目錄樹中運行'git'可執行文件,而沒有看似掃描每個文件。 – Dai
您是否意味着您尚未添加到臨時區域的新文件? –
是的,以及任何以任何方式修改的文件 - 只是更改文件中的單個字符。 – Dai