English ▾ Themen ▾ Neueste Version ▾ git-cat-file zuletzt aktualisiert in 2.52.0

NAME

git-cat-file - Bietet Inhalte oder Details von Repository-Objekten

SYNOPSIS

git cat-file <type> <object>
git cat-file (-e | -p | -t | -s) <object>
git cat-file (--textconv | --filters)
	     [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]
git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
	     [--buffer] [--follow-symlinks] [--unordered]
	     [--textconv | --filters] [-Z]

BESCHREIBUNG

Gibt den Inhalt oder andere Eigenschaften wie Größe, Typ oder Delta-Informationen eines oder mehrerer Objekte aus.

Dieser Befehl kann in zwei Modi arbeiten, abhängig davon, ob eine Option aus der --batch-Familie angegeben ist.

Im Nicht-Batch-Modus liefert der Befehl Informationen zu einem auf der Befehlszeile benannten Objekt.

Im Batch-Modus werden Argumente aus der Standardeingabe gelesen.

OPTIONEN

<object>

Der Name des anzuzeigenden Objekts. Eine vollständigere Liste der Möglichkeiten, Objektnamen zu schreiben, finden Sie im Abschnitt "SPECIFYING REVISIONS" in gitrevisions[7].

-t

Anstelle des Inhalts wird der Objekttyp angezeigt, der durch <object> identifiziert wird.

-s

Anstelle des Inhalts wird die Objektgröße angezeigt, die durch <object> identifiziert wird. Bei Verwendung mit der Option --use-mailmap wird die Größe des aktualisierten Objekts angezeigt, nachdem Identen mithilfe des Mailmap-Mechanismus ersetzt wurden.

-e

Beendet mit dem Rückgabecode Null, wenn <object> existiert und ein gültiges Objekt ist. Wenn <object> ein ungültiges Format hat, wird mit einem Rückgabecode ungleich Null beendet und eine Fehlermeldung auf stderr ausgegeben.

-p

Gibt den Inhalt von <object> basierend auf seinem Typ übersichtlich aus.

<type>

Dies entspricht normalerweise dem tatsächlichen Typ von <object>, aber das Anfordern eines Typs, der trivial aus dem gegebenen <object> dereferenziert werden kann, ist ebenfalls zulässig. Ein Beispiel ist das Anfordern eines "tree" mit <object>, das ein Commit-Objekt enthält, oder das Anfordern eines "blob" mit <object>, das ein Tag-Objekt ist, das darauf zeigt.

--mailmap
--no-mailmap
--use-mailmap
--no-use-mailmap

Verwendet die Mailmap-Datei, um Autoren-, Committer- und Tagger-Namen und E-Mail-Adressen auf kanonische Realnamen und E-Mail-Adressen abzubilden. Siehe git-shortlog[1].

--textconv

Zeigt den Inhalt an, wie er von einem Textconv-Filter transformiert wurde. In diesem Fall muss <object> die Form <tree-ish>:<path> oder :<path> haben, um den Filter auf den im Index unter <path> aufgezeichneten Inhalt anzuwenden.

--filters

Zeigt den Inhalt an, wie er von den im aktuellen Arbeitsverzeichnis konfigurierten Filtern für den angegebenen <path> konvertiert wurde (d. h. Smudge-Filter, Zeilenendkonvertierung usw.). In diesem Fall muss <object> die Form <tree-ish>:<path> oder :<path> haben.

--filter=<filter-spec>
--no-filter

Objekte aus der Liste der ausgegebenen Objekte ausschließen. Dies kann nur in Kombination mit einem der Batch-Modi verwendet werden. Ausgeschlossene Objekte, die explizit über einen der Batch-Modi, die Objekte über Standardeingabe lesen (--batch, --batch-check), angefordert wurden, werden als "gefiltert" gemeldet. Ausgeschlossene Objekte im Modus --batch-all-objects werden überhaupt nicht ausgegeben. Die <filter-spec> kann eine der folgenden sein

Die Form --filter=blob:none schließt alle Blobs aus.

Die Form --filter=blob:limit=<n>[kmg] schließt Blobs der Größe n Bytes oder Einheiten aus. n kann Null sein. Die Suffixe k, m und g können verwendet werden, um Einheiten in KiB, MiB oder GiB zu benennen. Zum Beispiel ist blob:limit=1k dasselbe wie blob:limit=1024.

Die Form --filter=object:type=(tag|commit|tree|blob) schließt alle Objekte aus, die nicht vom angeforderten Typ sind.

--path=<path>

Zur Verwendung mit --textconv oder --filters, um die separate Angabe eines Objektnamens und eines Pfads zu ermöglichen, z. B. wenn es schwierig ist, die Revision zu ermitteln, von der der Blob stammt.

--batch
--batch=<format>

Gibt Objektinformationen und Inhalte für jedes auf stdin bereitgestellte Objekt aus. Darf nicht mit anderen Optionen oder Argumenten kombiniert werden, außer mit --textconv, --filters oder --use-mailmap.

  • Bei Verwendung mit --textconv oder --filters müssen die Eingabezeilen den Pfad angeben, getrennt durch Leerzeichen. Siehe den Abschnitt BATCH OUTPUT unten für Details.

  • Bei Verwendung mit --use-mailmap zeigt der Inhalts-Teil der Ausgabe für Commit- und Tag-Objekte die Identitäten an, die mithilfe des Mailmap-Mechanismus ersetzt wurden, während die Informations-Teil der Ausgabe die Größe des Objekts so anzeigt, als ob es tatsächlich die ersetzten Identitäten gespeichert hätte.

--batch-check
--batch-check=<format>

Gibt Objektinformationen für jedes auf stdin bereitgestellte Objekt aus. Darf nicht mit anderen Optionen oder Argumenten kombiniert werden, außer mit --textconv, --filters oder --use-mailmap.

  • Bei Verwendung mit --textconv oder --filters müssen die Eingabezeilen den Pfad angeben, getrennt durch Leerzeichen. Siehe den Abschnitt BATCH OUTPUT unten für Details.

  • Bei Verwendung mit --use-mailmap zeigt die Objektinformationen für Commit- und Tag-Objekte die Größe des Objekts so an, als ob die darin gespeicherten Identitäten durch den Mailmap-Mechanismus ersetzt worden wären.

--batch-command
--batch-command=<format>

Aktiviert einen Befehlsmodus, der Befehle und Argumente von stdin liest. Darf nur mit --buffer, --textconv, --use-mailmap oder --filters kombiniert werden.

  • Bei Verwendung mit --textconv oder --filters müssen die Eingabezeilen den Pfad angeben, getrennt durch Leerzeichen. Siehe den Abschnitt BATCH OUTPUT unten für Details.

  • Bei Verwendung mit --use-mailmap zeigt der Befehl contents für Commit- und Tag-Objekte die durch den Mailmap-Mechanismus ersetzten Identitäten an, während der Befehl info die Größe des Objekts so anzeigt, als ob es tatsächlich die ersetzten Identitäten gespeichert hätte.

--batch-command erkennt die folgenden Befehle

contents <object>

Gibt den Objektinhalt für die Objektreferenz <object> aus. Dies entspricht der Ausgabe von --batch.

info <object>

Gibt Objektinformationen für die Objektreferenz <object> aus. Dies entspricht der Ausgabe von --batch-check.

flush

Wird mit --buffer verwendet, um alle vorherigen Befehle auszuführen, die seit dem Anfang oder seit dem letzten Flush ausgegeben wurden. Wenn --buffer verwendet wird, erfolgt keine Ausgabe, bis ein flush ausgegeben wird. Wenn --buffer nicht verwendet wird, werden Befehle jedes Mal ohne Ausgabe von flush verarbeitet.

--batch-all-objects

Anstatt eine Liste von Objekten auf stdin zu lesen, wird der angeforderte Batch-Vorgang für alle Objekte im Repository und allen alternativen Objektspeichern (nicht nur erreichbare Objekte) ausgeführt. Erfordert die Angabe von --batch oder --batch-check. Standardmäßig werden die Objekte in einer nach ihren Hashes sortierten Reihenfolge besucht; siehe auch --unordered unten. Objekte werden unverändert dargestellt, ohne den "replace"-Mechanismus von git-replace[1] zu berücksichtigen.

--buffer

Normalerweise wird die Batch-Ausgabe nach der Ausgabe jedes Objekts geleert, sodass ein Prozess interaktiv von cat-file lesen und schreiben kann. Mit dieser Option verwendet die Ausgabe normale stdio-Pufferung; dies ist bei der Ausführung von --batch-check oder --batch-command für eine große Anzahl von Objekten deutlich effizienter.

--unordered

Wenn --batch-all-objects verwendet wird, werden die Objekte in einer Reihenfolge besucht, die für den Zugriff auf die Objektinhalte effizienter sein kann als die Hash-Reihenfolge. Die genauen Details der Reihenfolge sind nicht spezifiziert, aber wenn Sie keine bestimmte Reihenfolge benötigen, sollte dies im Allgemeinen zu einer schnelleren Ausgabe führen, insbesondere mit --batch. Beachten Sie, dass cat-file jedes Objekt nur einmal anzeigt, auch wenn es mehrmals im Repository gespeichert ist.

Mit --batch oder --batch-check werden Symlinks im Repository verfolgt, wenn Objekte mit erweiterten SHA-1-Ausdrücken der Form tree-ish:path-in-tree angefordert werden. Anstatt Informationen über den Link selbst auszugeben, werden Informationen über das verlinkte Objekt ausgegeben. Wenn ein Symlink außerhalb des Tree-ish zeigt (z. B. ein Link zu /foo oder ein Link auf Root-Ebene zu ../foo), wird der Teil des Links, der sich außerhalb des Trees befindet, ausgegeben.

Diese Option funktioniert (derzeit) nicht korrekt, wenn ein Objekt im Index angegeben wird (z. B. :link anstelle von HEAD:link) anstatt eines im Tree.

Diese Option kann (derzeit) nur verwendet werden, wenn --batch oder --batch-check verwendet wird.

Betrachten Sie zum Beispiel ein Git-Repository, das Folgendes enthält

f: a file containing "hello\n"
link: a symlink to f
dir/link: a symlink to ../f
plink: a symlink to ../f
alink: a symlink to /etc/passwd

Für eine reguläre Datei f würde echo HEAD:f | git cat-file --batch Folgendes ausgeben:

ce013625030ba8dba906f756967f9e9ca394464a blob 6

Und echo HEAD:link | git cat-file --batch --follow-symlinks würde dasselbe ausgeben, ebenso wie HEAD:dir/link, da beide auf HEAD:f verweisen.

Ohne --follow-symlinks würden diese Daten über den Symlink selbst ausgeben. Im Fall von HEAD:link würden Sie Folgendes sehen:

4d1ae35ba2c8ec712fa2a379db44ad639ca277bd blob 1

Sowohl plink als auch alink zeigen außerhalb des Trees, also würden sie jeweils Folgendes ausgeben:

symlink 4
../f
symlink 11
/etc/passwd
-Z

Nur sinnvoll mit --batch, --batch-check oder --batch-command; Eingabe und Ausgabe sind NUL-delimitiert statt Zeilenumbruch-delimitiert.

-z

Nur sinnvoll mit --batch, --batch-check oder --batch-command; Eingabe ist NUL-delimitiert statt Zeilenumbruch-delimitiert. Diese Option ist veraltet zugunsten von -Z, da die Ausgabe sonst mehrdeutig sein kann.

AUSGABE

Wenn -t angegeben ist, einer der <type>.

Wenn -s angegeben ist, die Größe des <object> in Bytes.

Wenn -e angegeben ist, keine Ausgabe, es sei denn, das <object> ist fehlerhaft.

Wenn -p angegeben ist, werden die Inhalte von <object> übersichtlich ausgegeben.

Wenn <type> angegeben ist, werden die Rohdaten (wenn auch unkomprimiert) von <object> zurückgegeben.

BATCH OUTPUT

Wenn --batch oder --batch-check angegeben wird, liest cat-file Objekte von stdin, eines pro Zeile, und gibt Informationen darüber in der gleichen Reihenfolge aus, wie sie gelesen wurden. Standardmäßig wird die gesamte Zeile als Objekt betrachtet, als ob sie an git-rev-parse[1] übergeben würde.

Wenn --batch-command angegeben wird, liest cat-file Befehle von stdin, einen pro Zeile, und gibt Informationen basierend auf dem gegebenen Befehl aus. Mit --batch-command gibt der Befehl info gefolgt von einem Objekt Informationen über das Objekt aus, genauso wie --batch-check es tun würde, und der Befehl contents gefolgt von einem Objekt gibt Inhalte genauso aus, wie --batch es tun würde.

Sie können die für jedes Objekt angezeigten Informationen durch ein benutzerdefiniertes <format> angeben. Das <format> wird für jedes Objekt wörtlich nach stdout kopiert, wobei Platzhalter der Form %(atom) erweitert und von einem Zeilenumbruch gefolgt werden. Die verfügbaren Atome sind

objectname

Die vollständige Hex-Darstellung des Objekt namens.

objecttype

Der Typ des Objekts (derselbe wie bei der Ausgabe von cat-file -t).

objectmode

Wenn das angegebene Objekt Modusinformationen hat (wie ein Tree oder ein Indexeintrag), wird der Modus als oktale Ganzzahl ausgedrückt. Andernfalls eine leere Zeichenkette.

objectsize

Die Größe des Objekts in Bytes (dieselbe wie bei der Ausgabe von cat-file -s).

objectsize:disk

Die Größe des Objekts in Bytes, die es auf der Festplatte einnimmt. Siehe den Hinweis zu Festplattengrößen im Abschnitt CAVEATS unten.

deltabase

Wenn das Objekt auf der Festplatte als Delta gespeichert ist, wird dies auf die vollständige Hex-Darstellung des Delta-Basisobjektnamens erweitert. Andernfalls wird es auf die Null-OID (nur Nullen) erweitert. Siehe CAVEATS unten.

rest

Wenn dieses Atom in der Ausgabesequenz verwendet wird, werden Eingabezeilen am ersten Leerzeichen aufgeteilt. Alle Zeichen vor diesem Leerzeichen gelten als Objektname; Zeichen nach diesem ersten Leerzeichen (d. h. der "Rest" der Zeile) werden anstelle des Atoms %(rest) ausgegeben.

Wenn kein Format angegeben ist, ist das Standardformat %(objectname) %(objecttype) %(objectsize).

Wenn --batch angegeben ist oder wenn --batch-command mit dem Befehl contents verwendet wird, folgen den Objektinformationen die Objektinhalte (bestehend aus %(objectsize) Bytes), gefolgt von einem Zeilenumbruch.

Zum Beispiel würde --batch ohne ein benutzerdefiniertes Format Folgendes erzeugen:

<oid> SP <type> SP <size> LF
<contents> LF

Während --batch-check='%(objectname) %(objecttype) Folgendes erzeugen würde:

<oid> SP <type> LF

Wenn ein Name auf stdin angegeben wird, der nicht zu einem Objekt im Repository aufgelöst werden kann, ignoriert cat-file jedes benutzerdefinierte Format und gibt Folgendes aus:

<object> SP missing LF

Wenn ein Name auf stdin angegeben wird, der über --filter= herausgefiltert wird, ignoriert cat-file jedes benutzerdefinierte Format und gibt Folgendes aus:

<object> SP excluded LF

Wenn ein Name angegeben wird, der auf mehr als ein Objekt verweisen könnte (ein mehrdeutiger kurzer SHA), ignoriert cat-file jedes benutzerdefinierte Format und gibt Folgendes aus:

<object> SP ambiguous LF

Wenn ein Name angegeben wird, der auf einen Submodul-Eintrag in einem Tree verweist und das Zielobjekt im Repository nicht existiert, ignoriert cat-file jedes benutzerdefinierte Format und gibt Folgendes aus (mit der Objekt-ID des Submoduls):

<oid> SP submodule LF

Wenn --follow-symlinks verwendet wird und ein Symlink im Repository außerhalb des Repositorys zeigt, ignoriert cat-file jedes benutzerdefinierte Format und gibt Folgendes aus:

symlink SP <size> LF
<symlink> LF

Der Symlink ist entweder absolut (beginnt mit einem /) oder relativ zum Tree-Root. Wenn z. B. dir/link auf ../../foo zeigt, dann ist <symlink> ../foo. <size> ist die Größe des Symlinks in Bytes.

Wenn --follow-symlinks verwendet wird, werden die folgenden Fehlermeldungen angezeigt:

<object> SP missing LF

wird ausgegeben, wenn der anfängliche angeforderte Symlink nicht existiert.

dangling SP <size> LF
<object> LF

wird ausgegeben, wenn der anfängliche Symlink existiert, aber etwas, auf das er (transitiv) verweist, nicht existiert.

loop SP <size> LF
<object> LF

wird für Symlink-Schleifen (oder beliebige Symlinks, die mehr als 40 Link-Auflösungen erfordern) ausgegeben.

notdir SP <size> LF
<object> LF

wird ausgegeben, wenn während der Symlink-Auflösung eine Datei als Verzeichnisname verwendet wird.

Alternativ, wenn -Z übergeben wird, werden die Zeilenumbrüche in den obigen Beispielen durch NUL-Terminatoren ersetzt. Dies stellt sicher, dass die Ausgabe analysierbar ist, wenn die Ausgabe selbst einen Zeilenumbruch enthalten würde, und wird daher für Skriptingzwecke empfohlen.

HINWEISE

Beachten Sie, dass die Größen von Objekten auf der Festplatte genau angegeben werden, aber Vorsicht ist geboten, wenn Schlussfolgerungen darüber gezogen werden, welche Refs oder Objekte für die Festplattennutzung verantwortlich sind. Die Größe eines verpackten Nicht-Delta-Objekts kann viel größer sein als die Größe von Objekten, die gegen es deltabasiert sind, aber die Wahl, welches Objekt die Basis und welches das Delta ist, ist willkürlich und kann sich während eines Repacks ändern.

Beachten Sie auch, dass mehrere Kopien eines Objekts in der Objektdatenbank vorhanden sein können; in diesem Fall ist undefiniert, welche Kopie für die Größe oder die Delta-Basis angegeben wird.

GIT

Teil der git[1] Suite