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

Übersicht

git pack-objects [--stdout] [--all] <base-name> < <object-list>

Beschreibung

Der git pack-objects-Befehl komprimiert eine Menge von Objekten in eine einzige Pack-Datei und wendet Delta-Kompression auf ähnliche Objekte an. Packs sind die Art, wie Git Objekte effizient auf der Festplatte und über das Netzwerk speichert — jeder Fetch und Push überträgt Packs.

Im täglichen Einsatz integriert sich git pack-objects eng mit Shell-Aliasen, Editor-Plugins und Continuous Integration. Power-User fügen oft Aliase hinzu, die Flags kombinieren, die sie immer übergeben, oder wickeln den Befehl in Skripte, die Teamkonventionen durchsetzen. Die Ausgabeformatierung kann über Git-Config angepasst werden — Pretty-Formate, Farbschemata und Pager-Verhalten sind alle einstellbar. Wenn etwas schiefgeht, ist der erste Diagnoseschritt üblicherweise, den Befehl erneut mit GIT_TRACE=1 in der Umgebung auszuführen, was die zugrunde liegenden Plumbing-Aufrufe offenlegt. Für ungewöhnliche Situationen öffnet die --help-Ausgabe (git pack-objects --help) die vollständige Manpage mit Details zu jeder Option, einschließlich solcher, die in alltäglichen Workflows selten verwendet werden, aber für Debugging oder Skripting im großen Maßstab essentiell sind.

Zu verstehen, wie git pack-objects mit dem Rest von Gits Datenmodell interagiert — der Objektdatenbank, dem Index, Refs und dem Working Tree — zahlt sich aus. Jeder Befehl operiert auf einer Teilmenge dieser Stücke, und zu wissen, welche er berührt, hilft Ergebnisse vorherzusagen und sich von Fehlern zu erholen. Das Lesen der offiziellen Git-Dokumentation neben praktischer Übung in einem Wegwerf-Repository ist der schnellste Weg, die Nuancen zu verinnerlichen. Die meisten Produktionsprobleme mit Git rühren von einer von drei Ursachen: überraschendem Standardverhalten, partiellen Netzwerkoperationen oder dem Umschreiben bereits geteilter Historie. Ein funktionierendes mentales Modell der Nebenwirkungen von git pack-objects hilft, alle drei zu vermeiden.

Häufige Optionen

OptionBeschreibung
--stdoutSchreibt das Pack nach stdout statt in Dateien.
--allPackt alles, was von einer Ref erreichbar ist.
--revsLiest Revisionen von stdin statt Objekt-SHAs.
--depth=<n>Maximale Delta-Ketten-Tiefe.
--window=<n>Fenstergröße für die Delta-Suche.
--thinErlaubt dünne Packs (Deltas gegen externe Objekte).
--no-reuse-deltaBerechnet Deltas neu, statt vorhandene wiederzuverwenden.

Beispiele

git rev-list --objects --all | git pack-objects --stdout > everything.pack
    # Ein einzelnes Pack jedes erreichbaren Objekts erstellen

    git rev-list --objects HEAD ^origin/main | \
      git pack-objects --thin --stdout > ahead.pack
    # Ein dünnes Pack nur der Commits, die vor origin/main sind

    git pack-objects --all .git/objects/pack/extra
    # Alle erreichbaren Objekte in ein neues Pack namens "extra" repacken

Häufige Fehler

Große Packs mit zu hoch gesetzten --depth und --window zu bauen verbraucht viel Speicher und CPU. Die Standardwerte von git gc sind für die meisten Repos sinnvoll. Dünne Packs ohne Kontext (ein bestehendes Repo, auf das sie angewendet werden) zu erzeugen ist nutzlos.

Verwandte Befehle

git unpack-objects, git verify-pack, git gc, git repack