這診斷 Git 為什麼這麼慢文章中有一個有趣的項目:
啟用檔案系統快取
Windows 的檔案系統層本質上與 Linux 不同(Git 的檔案系統存取針對 Linux 進行了最佳化)。作為一種解決方法,Git for Windows 提供了一個檔案系統緩存,可以在許多情況下在初始「預熱」後加速操作。您可以啟動每個儲存庫的檔案系統快取:
git config core.fscache true
如果我在 Git 中啟用此選項,實際上會發生什麼變化? Windows 7 中的檔案系統快取是什麼樣的? 「初步預熱」意味著什麼?
答案1
內容如下git config --help
:
核心.fscache
為某些操作啟用檔案系統資料的額外快取。Windows 版 Git 使用它來批次讀取和快取整個目錄的 lstat 資料(而不是逐一執行 lstat)。
git 不會執行許多檔案系統請求,只會執行一個請求來取得目錄中所有檔案的資訊。
更多技術描述可以在引入的 commit 中找到fscache
:
Win32:在 mingw 的 lstat 和 dirent 實作下面新增緩存
由於 lstat 模擬速度慢(git 對索引中的每個檔案呼叫一次 lstat),在 Windows 上檢查工作樹狀態相當緩慢。 Windows 作業系統 API 似乎更擅長掃描整個目錄的狀態,而不是檢查單一檔案。
新增一個使用 lstat 資料快取的 lstat 實作。快取未命中會讀取整個父目錄並將其新增至快取。對同一目錄的後續 lstat 呼叫直接從快取提供服務。
也實作 opendir / readdir / closeir ,以便它們在快取中建立和使用目錄清單。
快取不會追蹤檔案系統更改,也不會插入任何修改檔案的 API,因此必須為不修改工作副本的 git 函數明確啟用它。