Von Gast (nicht überprüft) , 29 April 2026

Das Cross-Fork-Problem

Forge-Server (GitHub, GitLab) hosten viele Forks eines Repos zusammen. Naiv komprimiert ein einzelnes Packfile Deltas uber alle Forks — effizient auf Disk, aber ineffizient beim Servieren eines einzelnen Forks. Delta-Inseln beschranken Delta-Ketten so, dass die Ketten jedes Forks innerhalb seines eigenen Objekt-Sets bleiben.

Inseln konfigurieren

[pack]
island = refs/heads/main
island = refs/heads/release/*
island = refs/tags/*

Repacking mit Inseln

git repack -adf --window=250 --depth=50

Anwendungsfalle

  • Selbstgehostetes Gitea/GitLab/Forgejo mit vielen Forks.
  • Interne Mirror, die mehrere interne Repos servieren.
  • Backups, die Per-Repo-Snapshots schnell extrahieren mussen.

Nur-Server-Feature

Delta-Inseln zahlen auf dem Server.

Verifikation

git verify-pack -v .git/objects/pack/pack-*.idx | head
GIT_TRACE2_PERF=1 git pack-objects --stdout --revs < refs.txt > out.pack

Haufige Fehler

Inseln zu grob setzen (alles in einer Insel) — kein Nutzen.

Pseudo-Merge-Bitmaps

Modernes Git paart Delta-Inseln mit Pseudo-Merge-Bitmaps.