Da Anonimo (non verificato) , 29 Aprile 2026

Il problema dell'attraversamento status

git status confronta il working tree con l'index, attraversando le info stat di ogni file tracciato. Su un repo da un milione di file questo puo prendere secondi. Fsmonitor usa le notifiche di cambio file del sistema operativo (FSEvents su macOS, ReadDirectoryChangesW su Windows, inotify su Linux).

Daemon integrato (Git 2.36+)

git config core.fsmonitor true
git fsmonitor--daemon start
git fsmonitor--daemon status
git fsmonitor--daemon stop

Integrazioni esterne

git config core.fsmonitor /path/to/hook
git config core.fsmonitorHookVersion 2

Verifica

GIT_TRACE2_PERF=1 git status 2>&1 | grep fsmonitor
git fsmonitor--daemon status
git update-index --fsmonitor

Untracked cache

git config core.untrackedCache true

Numeri di performance

Su un monorepo da 4 milioni di file, git status scende da 5+ secondi a meno di 200ms.

Errori comuni

Abilitare fsmonitor senza untracked cache — solo meta vittoria.

Caveat per piattaforma

  • macOS: FSEvents e affidabile.
  • Windows: ReadDirectoryChangesW.
  • Linux: limiti inotify (fs.inotify.max_user_watches).
sudo sysctl fs.inotify.max_user_watches=524288