記git status不顯示已追蹤文件文件的更改
- 作者:吳思含(Witheart)
- 更新時間:20250624
概要:本文記錄了一個 Git 問題的排查過程:文件已被 Git 追蹤且未被忽略,但修改後 git status 不顯示變更。最終發現是由於 core.fsmonitor 設置導致的問題,並詳細介紹了其原理和解決方法。
1. 問題描述
文件已經確認被 Git 追蹤,也沒有被 .gitignore 忽略,但在修改並保存後,執行 git status 顯示“沒有任何更改”。
2. 具體排查
使用以下命令確認文件已被 Git 管理:
git ls-files -- kernel-5.10/arch/arm64/boot/dts/rockchip/RB_RK3588.dtsi
輸出為文件的相對路徑,説明該文件真的是 Git 管理的。
隨後查看 .gitignore 文件,確認該文件沒有被忽略。
3. 問題原因
問題最終定位為 core.fsmonitor 設置導致。
3.1 檢查 fsmonitor 設置
使用以下命令檢查:
git config core.fsmonitor
若輸出為 true,表示 fsmonitor 功能已啓用。
3.2 解決方法
關閉該功能即可解決問題:
- 針對當前倉庫關閉:
git config core.fsmonitor false
- 針對所有倉庫統一關閉:
git config --global core.fsmonitor false
4. core.fsmonitor 是什麼
4.1 核心概念:狀態檢測的兩種模式
- 傳統模式:Git 通過掃描整個工作目錄的文件系統(遍歷所有文件,檢查 inode 狀態和時間戳)來判斷文件變更。
- fsmonitor 模式:Git 委託外部守護進程(如 Watchman)實時監控文件變化,僅查詢被報告為“已修改”的文件。
4.2 潛在問題
如果監視器配置錯誤或事件丟失,可能會導致 Git 無法檢測到文件的實際修改,從而出現 git status 不顯示改動的情況。