Das Set-Operations-Problem
Operationen wie clone, fetch und gc mussen berechnen "welche Objekte sind von diesen Commits erreichbar?". Erreichbarkeits-Bitmaps speichern diese Antwort als komprimierte Bitmaps.
Generierung
git repack -adb
git multi-pack-index write --bitmap
git config repack.writeBitmaps true
git config pack.writeBitmaps true
Wie Server sie verwenden
Wenn ein Client klont, muss der Server alle erreichbaren Objekte aufzahlen. Mit Bitmaps ist das ein OR uber die Bitmaps aller Branch-Tips.
Pseudo-Merge-Bitmaps (Git 2.45+)
git config pack.writeBitmapPseudoMergeStable true
git config repack.writeBitmapHashCache true
Verifikation
ls .git/objects/pack/*.bitmap
git rev-list --use-bitmap-index --count --all
git rev-list --test-bitmap HEAD
Server vs Client
Bitmaps nutzen beiden Seiten, sind aber auf dem Server am wichtigsten.
Haufige Fehler
Bitmaps bei jedem gc auf kleinen Repos schreiben — Overhead kann den Nutzen ubersteigen.
Reale Zahlen
GitHub berichtete von 50-90% Reduktion der Klon-CPU nach Aktivierung von Bitmaps.