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

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.