English ▾ Themen ▾ Neueste Version ▾ git-pack-refs zuletzt aktualisiert in 2.52.0

NAME

git-pack-refs - Bündelt Heads und Tags für effizienten Repository-Zugriff

SYNOPSIS

git pack-refs [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]

BESCHREIBUNG

Traditionell wurden Spitzen von Branches und Tags (kollektiv als Refs bezeichnet) als eine Datei pro Ref in einem (Unter-)Verzeichnis unter $GIT_DIR/refs gespeichert. Während viele Branch-Spitzen oft aktualisiert werden, werden die meisten Tags und einige Branch-Spitzen nie aktualisiert. Wenn ein Repository Hunderte oder Tausende von Tags hat, verschwendet dieses Format "eine Datei pro Ref" sowohl Speicherplatz als auch Leistung.

Dieser Befehl wird verwendet, um das Speicherplatz- und Leistungsproblem zu lösen, indem die Refs in einer einzigen Datei, $GIT_DIR/packed-refs, gespeichert werden. Wenn eine Ref im traditionellen $GIT_DIR/refs Verzeichnisbaum fehlt, wird sie in dieser Datei nachgeschlagen und verwendet, wenn sie gefunden wird.

Nachfolgende Aktualisierungen von Branches erstellen immer neue Dateien unter dem $GIT_DIR/refs Verzeichnisbaum.

Eine empfohlene Vorgehensweise, um mit einem Repository mit zu vielen Refs umzugehen, ist, seine Refs einmal mit --all zu bündeln und gelegentlich git pack-refs auszuführen. Tags sind per Definition stationär und werden voraussichtlich nicht geändert. Branch-Heads werden mit dem anfänglichen pack-refs --all gebündelt, aber nur die aktuell aktiven Branch-Heads werden entpackt, und die nächste pack-refs (ohne --all) lässt sie entpackt.

OPTIONEN

--all

Der Befehl bündelt standardmäßig alle Tags und bereits gebündelten Refs und lässt andere Refs unverändert. Dies liegt daran, dass erwartet wird, dass Branches aktiv entwickelt werden und das Bündeln ihrer Spitzen die Leistung nicht verbessert. Diese Option bewirkt, dass auch alle Refs gebündelt werden, mit Ausnahme von versteckten Refs, defekten Refs und symbolischen Refs. Nützlich für ein Repository mit vielen Branches von historischem Interesse.

--no-prune

Der Befehl entfernt normalerweise lose Refs unter dem $GIT_DIR/refs Verzeichnisbaum nach dem Bündeln. Diese Option weist ihn an, dies nicht zu tun.

--auto

Bündelt Refs nach Bedarf basierend auf dem aktuellen Zustand der Ref-Datenbank. Das Verhalten hängt vom von Repository verwendeten Ref-Format ab und kann sich in Zukunft ändern.

  • "files": Lose Referenzen werden basierend auf dem Verhältnis von losen Referenzen zur Größe der packed-refs Datei in die packed-refs Datei gebündelt. Je größer die packed-refs Datei ist, desto mehr lose Referenzen müssen vorhanden sein, bevor wir neu bündeln.

  • "reftable": Tabellen werden so komprimiert, dass sie eine geometrische Folge bilden. Für zwei Tabellen N und N+1, wobei N+1 neuer ist, wird die Eigenschaft beibehalten, dass N mindestens doppelt so groß ist wie N+1. Nur Tabellen, die diese Eigenschaft verletzen, werden komprimiert.

--include <Muster>

Bündelt Refs basierend auf einem glob(7) Muster. Wiederholungen dieser Option akkumulieren Inklusionsmuster. Wenn eine Ref sowohl in --include als auch in --exclude enthalten ist, hat --exclude Vorrang. Die Verwendung von --include schließt standardmäßig alle Tags aus. Symbolische Refs und defekte Refs werden nie gebündelt. Bei Verwendung mit --all hat dies keine Auswirkung. Verwenden Sie --no-include, um die Liste der Muster zu löschen und zurückzusetzen.

--exclude <Muster>

Packt keine Refs, die dem angegebenen glob(7) Muster entsprechen. Wiederholungen dieser Option akkumulieren Ausschlussmuster. Verwenden Sie --no-exclude, um die Liste der Muster zu löschen und zurückzusetzen. Wenn eine Ref bereits gebündelt ist, wird sie durch die Angabe mit --exclude nicht entpackt.

Bei Verwendung mit --all werden nur lose Refs gebündelt, die keinem der angegebenen --exclude Muster entsprechen.

Bei Verwendung mit --include werden Refs, die an --include übergeben werden, abzüglich der an --exclude übergebenen Refs gebündelt.

BUGS

Ältere Dokumentationen, die vor der Einführung des Packed-Refs-Mechanismus geschrieben wurden, könnten immer noch Sätze wie ".git/refs/heads/<branch> Datei existiert" enthalten, wenn damit gemeint ist, dass "Branch <branch> existiert".

GIT

Teil der git[1] Suite