Le problème des opérations d'ensemble
Des opérations comme clone, fetch et gc doivent calculer "quels objets sont atteignables depuis ces commits ?" — un parcours de graphe qui touche chaque objet atteignable. Les bitmaps d'atteignabilité stockent cette réponse comme bitmaps compressés.
Génération
git repack -adb
git multi-pack-index write --bitmap
git config repack.writeBitmaps true
git config pack.writeBitmaps true
Comment les serveurs les utilisent
Quand un client clone, le serveur doit énumérer tous les objets atteignables. Avec les bitmaps, c'est un OR sur les bitmaps de tous les tips de branche.
Bitmaps pseudo-merge (Git 2.45+)
git config pack.writeBitmapPseudoMergeStable true
git config repack.writeBitmapHashCache true
Vérification
ls .git/objects/pack/*.bitmap
git rev-list --use-bitmap-index --count --all
git rev-list --test-bitmap HEAD
Serveur vs client
Les bitmaps bénéficient aux deux côtés mais comptent surtout côté serveur.
Erreurs courantes
Écrire des bitmaps à chaque gc sur petits repos — le surcoût peut excéder le bénéfice.
Chiffres réels
GitHub a rapporté 50-90% de réduction du CPU de clone après activation des bitmaps.