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

Zwei Enden eines Drahtes

Die Performance von Fetch und Push hangt von der Verhandlungseffizienz, der Transfergrosse und der serverseitigen Berechnung ab.

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

Warum maintenance, nicht gc

git maintenance (Git 2.31+) ist der moderne, task-orientierte Ersatz fur gc --auto. Es fuhrt spezifische Tasks (commit-graph, prefetch, incremental-repack, loose-objects, pack-refs, gc) auf optimierten Schedules im Hintergrund aus.

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

Was gc tut

git gc fuhrt Wartung durch: repackt loose Objekte, prunt unerreichbare uber die Ablauffenster hinaus, packt loose Refs in packed-refs, lasst Reflogs auslaufen und schreibt Commit-Graph und MIDX, wo konfiguriert.

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

Die Kosten des vollstandigen Repacks

Traditionelles git gc fuhrt git repack -ad aus und schreibt alle Objekte in ein Packfile um. Auf einem Multi-Gigabyte-Repo sind das Stunden CPU und IO. Geometrisches Repacking (Git 2.32+) vermeidet dies.

Wie es funktioniert

Pack-Grossen bilden eine Sequenz, in der jeder Pack mindestens N-mal grosser ist als der nachstkleinere.

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

Das Set-Operations-Problem

Operationen wie clone, fetch und gc mussen berechnen "welche Objekte sind von diesen Commits erreichbar?". Erreichbarkeits-Bitmaps speichern diese Antwort als komprimierte Bitmaps.

Generierung

git repack -adb
git multi-pack-index write --bitmap
git config repack.writeBitmaps true
git config pack.writeBitmaps true

Wie Server sie verwenden

Wenn ein Client klont, muss der Server alle erreichbaren Objekte aufzahlen. Mit Bitmaps ist das ein OR uber die Bitmaps aller Branch-Tips.

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

Das Problem des pfad-eingeschrankten Logs

git log -- path/to/file muss prinzipiell jeden Commit durchqueren und gegen seinen Vater diffen. Changed-path Bloom-Filter (Git 2.27+) beschleunigen dies dramatisch.

Wie Bloom-Filter funktionieren

Ein Bloom-Filter ist eine kleine Bitmap, die "definitiv nicht im Set" oder "wahrscheinlich im Set" fur Membership-Anfragen zuruckgibt.

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

Der Erreichbarkeits-Engpass

Viele Git-Operationen mussen "ist Commit X von Y aus erreichbar?" oder "welcher Commit ist die Merge-Basis?" beantworten. Die Commit-Graph-Datei berechnet Eltern-Zeiger, Generations-Nummern und (optional) Bloom-Filter in einer binaren Seitendatei vor.

Wo sie lebt

Alteres Git: .git/objects/info/commit-graph. Neueres Git: .git/objects/info/commit-graphs/ (verkettet).

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

Die Trace2-Facility

Trace2 (eingefuhrt in Git 2.22) ist die in Git eingebaute strukturierte Tracing-Facility.

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

Lineare Werkzeuge, exponentielle Repos

Git wurde ursprunglich fur den Linux-Kernel optimiert — gross fur die Standards von 2005, aber winzig fur die heutigen.