El problema cross-fork
Los servidores Forge (GitHub, GitLab) hospedan muchos forks de un repo juntos. Ingenuamente, un solo packfile comprime delta entre todos los forks — eficiente en disco, pero ineficiente al servir un solo fork. Las islas delta restringen las cadenas delta para que las cadenas de cada fork permanezcan dentro de su propio conjunto de objetos.
Configurar islas
[pack]
island = refs/heads/main
island = refs/heads/release/*
island = refs/tags/*
Repack con islas
git repack -adf --window=250 --depth=50
Casos de uso
- Gitea/GitLab/Forgejo self-hosted con muchos forks.
- Mirrors internos que sirven múltiples repos internos.
- Backups que necesitan extraer snapshots por repo rápidamente.
Característica solo de servidor
Las islas delta importan en el servidor. Como cliente, casi nunca las configuras.
Verificar
git verify-pack -v .git/objects/pack/pack-*.idx | head
GIT_TRACE2_PERF=1 git pack-objects --stdout --revs < refs.txt > out.pack
Errores comunes
Establecer islas demasiado gruesas (todo en una isla) — sin beneficio. Demasiado finas (por PR) — el tamaño del pack se infla.
Bitmaps pseudo-merge
Git reciente empareja islas delta con bitmaps pseudo-merge.