Da Anonimo (non verificato) , 29 Aprile 2026

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.