Le problème cross-fork
Les serveurs Forge (GitHub, GitLab) hébergent ensemble plusieurs forks d'un repo. Naïvement, un seul packfile compresse les deltas à travers tous les forks — efficace en disque, mais inefficace pour servir un seul fork. Les îles delta restreignent les chaînes delta pour que celles de chaque fork restent dans son propre ensemble d'objets.
Configurer les îles
[pack]
island = refs/heads/main
island = refs/heads/release/*
island = refs/tags/*
Repack avec îles
git repack -adf --window=250 --depth=50
Cas d'usage
- Gitea/GitLab/Forgejo self-hosted avec plusieurs forks.
- Mirrors internes servant plusieurs repos.
- Backups nécessitant extraction rapide de snapshots par repo.
Fonctionnalité côté serveur uniquement
Les îles delta importent côté serveur. Comme client, vous ne les configurez presque jamais.
Vérifier
git verify-pack -v .git/objects/pack/pack-*.idx | head
GIT_TRACE2_PERF=1 git pack-objects --stdout --revs < refs.txt > out.pack
Erreurs courantes
Définir des îles trop grossières (tout dans une île) — pas de bénéfice. Trop fines (par PR) — taille des packs explose.
Bitmaps pseudo-merge
Git récent apparie les îles delta avec les bitmaps pseudo-merge.