Il problema cross-fork
I server forge (GitHub, GitLab) ospitano molti fork di un repo insieme. Ingenuamente, un singolo packfile delta-comprime tra tutti i fork — efficiente su disco, ma inefficiente quando si serve un singolo fork. Le isole delta vincolano le catene delta cosi le catene di ogni fork rimangono nel proprio insieme di oggetti.
Configurare le isole
[pack]
island = refs/heads/main
island = refs/heads/release/*
island = refs/tags/*
Repacking con isole
git repack -adf --window=250 --depth=50
Casi d'uso
- Gitea/GitLab/Forgejo self-hosted con molti fork.
- Mirror interni che servono piu repo interni.
- Backup che devono estrarre snapshot per repo rapidamente.
Funzione solo server
Le isole delta contano sul server.
Verifica
git verify-pack -v .git/objects/pack/pack-*.idx | head
GIT_TRACE2_PERF=1 git pack-objects --stdout --revs < refs.txt > out.pack
Errori comuni
Impostare le isole troppo grossolanamente (tutto in una sola isola) — nessun beneficio.
Pseudo-merge bitmap
Git recente abbina le isole delta con bitmap pseudo-merge.