Par Anonyme (non vérifié) , 29 avril 2026

Pourquoi l'index est lent

Même avec sparse checkout, l'index par défaut contient une entrée par fichier dans tout le repo — un million d'entrées sur un monorepo, même si seulement mille sont présents dans l'arbre de travail. Le sparse index (Git 2.37+) remplace les répertoires exclus par une seule entrée tree.

Activation

git sparse-checkout init --cone --sparse-index
git config index.sparse true
git update-index --sparse

Comment ça marche

Chaque répertoire exclu est représenté dans l'index comme une entrée de mode 040000 (tree) avec le SHA de son tree commité.

Inspection

git ls-files --sparse | head
git ls-files -t | grep ^S | head
GIT_TRACE2_PERF=1 git status 2>&1 | grep sparse

Chiffres de performance

Sur un monorepo réel de 4M fichiers, l'équipe Microsoft Office a rapporté git status passant de 3 secondes à moins de 200ms. La taille du fichier index est passée de 350MB à 5MB.

Compatibilité

De nombreuses commandes sont sparse-aware : status, add, commit, diff, checkout, reset, restore, stash, ls-files.

Forcer l'expansion

git update-index --no-sparse
git update-index --sparse

Erreurs courantes

Tenter d'activer le sparse index en mode sparse-checkout non-cône — refusé.