Il problema delle operazioni sugli insiemi
Operazioni come clone, fetch e gc devono calcolare "quali oggetti sono raggiungibili da questi commit?" — un attraversamento del grafo. Le bitmap di raggiungibilita memorizzano questa risposta come bitmap compresse.
Generazione
git repack -adb
git multi-pack-index write --bitmap
git config repack.writeBitmaps true
git config pack.writeBitmaps true
Come i server le usano
Quando un client clona, il server deve enumerare tutti gli oggetti raggiungibili. Con le bitmap, e un OR sulle bitmap di tutti i tip di branch.
Pseudo-merge bitmap (Git 2.45+)
git config pack.writeBitmapPseudoMergeStable true
git config repack.writeBitmapHashCache true
Verifica
ls .git/objects/pack/*.bitmap
git rev-list --use-bitmap-index --count --all
git rev-list --test-bitmap HEAD
Server vs client
Le bitmap beneficiano entrambi i lati ma contano di piu sul server.
Errori comuni
Scrivere bitmap a ogni gc su repo piccoli — l'overhead puo superare il beneficio.
Numeri reali
GitHub ha riportato riduzioni del 50-90% della CPU di clone dopo aver abilitato le bitmap.