Perche l'index e lento
Anche con sparse checkout, l'index per default contiene una voce per file nell'intero repo. Lo sparse index (Git 2.37+) sostituisce le directory escluse con una singola voce di tree, riducendo l'index di 100x o piu.
Abilitare
git sparse-checkout init --cone --sparse-index
git config index.sparse true
git update-index --sparse
Come funziona
Ogni directory esclusa e rappresentata nell'index come una voce di modo 040000 (tree).
Ispezione
git ls-files --sparse | head
git ls-files -t | grep ^S | head
GIT_TRACE2_PERF=1 git status 2>&1 | grep sparse
Numeri di performance
Su un monorepo reale con 4M file, il team Microsoft Office ha riportato git status in calo da 3 secondi a meno di 200ms.
Compatibilita
Molti comandi sono sparse-aware: status, add, commit, diff, checkout, reset, restore, stash, ls-files.
Forzare l'espansione
git update-index --no-sparse
git update-index --sparse
Errori comuni
Provare ad abilitare lo sparse index in modalita sparse-checkout non-cone.