記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 不顯示改動的情況。