Warum der Index langsam ist
Selbst bei Sparse Checkout enthalt der Index standardmassig einen Eintrag pro Datei im gesamten Repo. Der Sparse Index (Git 2.37+) ersetzt ausgeschlossene Verzeichnisse durch einen einzigen Tree-Eintrag.
Aktivieren
git sparse-checkout init --cone --sparse-index
git config index.sparse true
git update-index --sparse
Wie es funktioniert
Jedes ausgeschlossene Verzeichnis wird im Index als ein Eintrag mit Modus 040000 (Tree) reprasentiert.
Inspektion
git ls-files --sparse | head
git ls-files -t | grep ^S | head
GIT_TRACE2_PERF=1 git status 2>&1 | grep sparse
Performance-Zahlen
Auf einem realen Monorepo mit 4M Dateien berichtete das Microsoft-Office-Team von einem Ruckgang von git status von 3 Sekunden auf unter 200ms.
Kompatibilitat
Viele Befehle sind sparse-aware: status, add, commit, diff, checkout, reset, restore, stash, ls-files.
Expansion erzwingen
git update-index --no-sparse
git update-index --sparse
Haufige Fehler
Versuchen, den Sparse Index im Non-Cone-Sparse-Checkout-Modus zu aktivieren.