English ▾ Themen ▾ Neueste Version ▾ git-for-each-ref zuletzt aktualisiert in 2.52.0

NAME

git-for-each-ref - Informationen über jeden Ref ausgeben

SYNOPSIS

git for-each-ref [--count=<count>] [--shell|--perl|--python|--tcl]
		   [(--sort=<key>)…​] [--format=<format>]
		   [--include-root-refs] [--points-at=<object>]
		   [--merged[=<object>]] [--no-merged[=<object>]]
		   [--contains[=<object>]] [--no-contains[=<object>]]
		   [(--exclude=<pattern>)…​] [--start-after=<marker>]
		   [ --stdin | (<pattern>...)]

BESCHREIBUNG

Iteriert über alle Refs, die mit <pattern> übereinstimmen, und zeigt sie gemäß dem angegebenen <format> an, nachdem sie gemäß dem angegebenen Satz von <key> sortiert wurden. Wenn <count> angegeben ist, wird nach der Anzeige dieser Anzahl von Refs gestoppt. Die interpolierten Werte in <format> können optional als Zeichenkettenliterale in der angegebenen Host-Sprache zitiert werden, was ihre direkte Auswertung in dieser Sprache ermöglicht.

OPTIONEN

<pattern>...

Wenn ein oder mehrere <pattern> Parameter angegeben sind, werden nur Refs angezeigt, die mit mindestens einem Muster übereinstimmen, entweder unter Verwendung von fnmatch(3) oder wörtlich, wobei im letzteren Fall eine vollständige Übereinstimmung oder eine Übereinstimmung vom Anfang bis zu einem Schrägstrich erfolgt.

--stdin

Die Liste der Muster wird von der Standardeingabe anstelle der Argumentliste gelesen.

--count=<count>

Stoppt nach der Anzeige von <count> Refs.

--sort=<key>

Sortiert nach dem Feldnamen <key>. Ein Präfix - sortiert in absteigender Reihenfolge des Wertes. Wenn nicht spezifiziert, wird refname verwendet. Sie können die Option --sort=<key> mehrmals verwenden, wobei der letzte Schlüssel zum primären Schlüssel wird.

--format[=<format>]

Eine Zeichenkette, die %(fieldname) von einem angezeigten Ref und dem Objekt, auf das es zeigt, interpoliert. Zusätzlich rendert die Zeichenkette %% als % und %xx - wobei xx Hexadezimalziffern sind - als das Zeichen mit dem Hex-Code xx. Zum Beispiel interpoliert %00 zu \0 (NUL), %09 zu \t (TAB) und %0a zu \n (LF).

Wenn nicht spezifiziert, ist <format> standardmäßig %(objectname) SPC %(objecttype) TAB %(refname).

--color[=<when>]

Beachtet alle Farben, die in der Option --format angegeben sind. Das Feld <when_ muss einer der Werte always, never oder auto sein (wenn <when> fehlt, verhält es sich so, als wäre always angegeben).

--shell
--perl
--python
--tcl

Wenn angegeben, werden Zeichenketten, die %(fieldname) Platzhalter ersetzen, als Zeichenkettenliterale zitiert, die für die angegebene Host-Sprache geeignet sind. Dies soll ein Skript erzeugen, das direkt "evaluiert" werden kann.

--points-at=<object>

Nur Refs auflisten, die auf das angegebene Objekt zeigen.

--merged[=<object>]

Nur Refs auflisten, deren Spitzen erreichbar sind von dem angegebenen Commit (HEAD, wenn nicht angegeben).

--no-merged[=<object>]

Nur Refs auflisten, deren Spitzen nicht erreichbar sind von <object> (HEAD, wenn nicht angegeben).

--contains[=<object>]

Nur Refs auflisten, die <object> enthalten (HEAD, wenn nicht angegeben).

--no-contains[=<object>]

Nur Refs auflisten, die <object> nicht enthalten (HEAD, wenn nicht angegeben).

--ignore-case

Sortierung und Filterung von Refs sind case-insensitiv.

--omit-empty

Druckt keine neue Zeile nach formatierten Refs, bei denen das Format zu einer leeren Zeichenkette expandiert.

--exclude=<excluded-pattern>

Wenn eine oder mehrere --exclude Optionen angegeben sind, werden nur Refs angezeigt, die mit keinem der <excluded-pattern> Parameter übereinstimmen. Die Übereinstimmung erfolgt nach den gleichen Regeln wie bei <pattern> oben.

--include-root-refs

Root-Refs (HEAD und Pseudorefs) zusätzlich zu regulären Refs auflisten.

--start-after=<marker>

Ermöglicht die Paginierung der Ausgabe, indem Referenzen bis einschließlich des angegebenen Markers übersprungen werden. Beim Paginieren ist zu beachten, dass Referenzen zwischen den Aufrufen gelöscht, geändert oder hinzugefügt werden können. Die Ausgabe liefert nur die Referenzen, die alphabetisch nach dem Marker kommen. Die Ausgabe beginnt mit der ersten Referenz, die alphabetisch nach dem Marker kommt. Kann nicht mit --sort=<key> oder --stdin Optionen oder dem/den <pattern> Argument(en) zur Begrenzung der Refs verwendet werden.

FELDNAMEN

Verschiedene Werte aus strukturierten Feldern in referenzierten Objekten können verwendet werden, um in die Ausgaben interpoliert oder als Sortierschlüssel zu werden.

Für alle Objekte können die folgenden Namen verwendet werden

refname

Der Name des Refs (der Teil nach $GIT_DIR/). Für einen nicht-mehrdeutigen Kurznamen des Refs hängen Sie :short an. Die Option core.warnAmbiguousRefs wird verwendet, um den strengen Abkürzungsmodus auszuwählen. Wenn lstrip=<n> (rstrip=<n>) angehängt wird, werden <n> schrägstrichgetrennte Pfadkomponenten von vorne (hinten) des Refnamens entfernt (z.B. wird %(refname:lstrip=2) aus refs/tags/foo zu foo und %(refname:rstrip=2) aus refs/tags/foo zu refs). Wenn <n> eine negative Zahl ist, werden so viele Pfadkomponenten wie nötig vom angegebenen Ende entfernt, um -<n> Pfadkomponenten zu belassen (z.B. wird %(refname:lstrip=-2) aus refs/tags/foo zu tags/foo und %(refname:rstrip=-1) aus refs/tags/foo zu refs). Wenn der Ref nicht genügend Komponenten hat, wird das Ergebnis eine leere Zeichenkette, wenn mit positivem <n> gestrippt wird, oder es wird der vollständige Refname, wenn mit negativem <N> gestrippt wird. Keines davon ist ein Fehler.

strip kann als Synonym für lstrip verwendet werden.

objecttype

Der Typ des Objekts (blob, tree, commit, tag).

objectsize

Die Größe des Objekts (dieselbe wie von git cat-file -s gemeldet). Hängen Sie :disk an, um die Größe in Bytes zu erhalten, die das Objekt auf der Festplatte belegt. Siehe den Hinweis zu Festplattengrößen im Abschnitt HINWEISE unten.

objectname

Der Objektname (auch bekannt als SHA-1). Für eine nicht-mehrdeutige Abkürzung des Objektnamens hängen Sie :short an. Für eine Abkürzung des Objektnamens mit gewünschter Länge hängen Sie :short=<length> an, wobei die minimale Länge MINIMUM_ABBREV ist. Die Länge kann überschritten werden, um eindeutige Objektnamen zu gewährleisten.

deltabase

Dies erweitert sich zum Objektname der Delta-Basis für das gegebene Objekt, wenn es als Delta gespeichert ist. Andernfalls erweitert es sich zum Null-Objekt-Namen (all Nullen).

upstream

Der Name eines lokalen Refs, der als "upstream" vom angezeigten Ref betrachtet werden kann. Berücksichtigt :short, :lstrip und :rstrip auf die gleiche Weise wie refname. Berücksichtigt zusätzlich :track, um "[ahead N, behind M]" anzuzeigen, und :trackshort, um die knappe Version anzuzeigen: ">" (ahead), "<" (behind), "<>" (ahead und behind) oder "=" (synchron). :track gibt auch "[gone]" aus, wenn ein unbekannter Upstream-Ref angetroffen wird. Hängen Sie :track,nobracket an, um Tracking-Informationen ohne Klammern anzuzeigen (d.h. "ahead N, behind M").

Für jeden Remote-Tracking-Branch %(upstream) beziehen sich %(upstream:remotename) und %(upstream:remoteref) auf den Namen des Remotes bzw. den Namen des getrackten Remote-Refs. Mit anderen Worten, der Remote-Tracking-Branch kann explizit und individuell mit dem Refspec %(upstream:remoteref):%(upstream) aktualisiert werden, um von %(upstream:remotename) zu fetchen.

Hat keine Auswirkung, wenn der Ref keine zugehörigen Tracking-Informationen hat. Alle Optionen außer nobracket sind gegenseitig ausschließend, aber wenn sie zusammen verwendet werden, wird die letzte Option ausgewählt.

push

Der Name eines lokalen Refs, der den @{push} Ort für den angezeigten Ref darstellt. Berücksichtigt die Optionen :short, :lstrip, :rstrip, :track, :trackshort, :remotename und :remoteref, wie upstream. Erzeugt eine leere Zeichenkette, wenn kein @{push} Ref konfiguriert ist.

HEAD

*, wenn HEAD mit dem aktuellen Ref übereinstimmt (dem ausgecheckten Branch), ansonsten ' '.

color

Ausgabe-Farbe ändern. Gefolgt von :<colorname>, wobei Farbnamen unter "Values" im Abschnitt "CONFIGURATION FILE" von git-config[1] beschrieben sind. Zum Beispiel %(color:bold red).

align

Links-, mittel- oder rechts-ausrichten des Inhalts zwischen %(align:...) und %(end). Der "align:" wird gefolgt von width=<width> und position=<position> in beliebiger Reihenfolge, durch Kommas getrennt, wobei <position> entweder left, right oder middle ist, Standard ist left und <width> ist die Gesamtlänge des Inhalts mit Ausrichtung. Zur Kürze können die Präfixe "width=" und/oder "position=" weggelassen und stattdessen bloße <width> und <position> verwendet werden. Zum Beispiel %(align:<width>,<position>). Wenn die Länge des Inhalts größer als die Breite ist, erfolgt keine Ausrichtung. Bei Verwendung mit --quote wird alles zwischen %(align:...) und %(end) zitiert, aber wenn verschachtelt, führt nur die oberste Ebene eine Zitierung durch.

if

Verwendet als %(if)...%(then)...%(end) oder %(if)...%(then)...%(else)...%(end). Wenn nach dem %(if) ein Atom mit einem Wert oder Zeichenkettenliteral vorhanden ist, wird alles nach dem %(then) ausgegeben. Andernfalls, wenn das %(else) Atom verwendet wird, wird alles nach %(else) ausgegeben. Wir ignorieren Leerzeichen bei der Auswertung der Zeichenkette vor %(then), was nützlich ist, wenn wir das %(HEAD) Atom verwenden, das entweder "*" oder " " ausgibt, und wir die if Bedingung nur auf den HEAD Ref anwenden wollen. Hängen Sie ":equals=<string>" oder ":notequals=<string>" an, um den Wert zwischen dem %(if:...) und %(then) Atom mit der gegebenen Zeichenkette zu vergleichen.

symref

Der Ref, auf den der gegebene symbolische Ref verweist. Wenn es kein symbolischer Ref ist, wird nichts ausgegeben. Berücksichtigt die Optionen :short, :lstrip und :rstrip auf die gleiche Weise wie refname oben.

signature

Die GPG-Signatur eines Commits.

signature:grade

Zeigt

G

für eine gute (gültige) Signatur an

B

für eine schlechte Signatur an

U

für eine gute Signatur mit unbekannter Gültigkeit an

X

für eine gute, aber abgelaufene Signatur an

Y

für eine gute Signatur, die mit einem abgelaufenen Schlüssel erstellt wurde an

R

für eine gute Signatur, die mit einem widerrufenen Schlüssel erstellt wurde an

E

wenn die Signatur nicht überprüft werden kann (z.B. fehlender Schlüssel)

N

für keine Signatur.

signature:signer

Der Unterzeichner der GPG-Signatur eines Commits.

signature:key

Der Schlüssel der GPG-Signatur eines Commits.

signature:fingerprint

Der Fingerabdruck der GPG-Signatur eines Commits.

signature:primarykeyfingerprint

Der Fingerabdruck des Primärschlüssels der GPG-Signatur eines Commits.

signature:trustlevel

Das Vertrauensniveau der GPG-Signatur eines Commits. Mögliche Ausgaben sind ultimate, fully, marginal, never und undefined.

worktreepath

Der absolute Pfad zum Arbeitsverzeichnis, in dem der Ref ausgecheckt ist, falls er in einem verknüpften Arbeitsverzeichnis ausgecheckt ist. Andernfalls eine leere Zeichenkette.

ahead-behind:<commit-ish>

Zwei Ganzzahlen, durch ein Leerzeichen getrennt, die die Anzahl der "ahead" und "behind" Commits anzeigen, wenn der Ausgabereferenz mit dem in <committish> angegebenen Commit verglichen wird.

is-base:<commit-ish>

In maximal einer Zeile wird (<commit-ish>) angezeigt, um den Ref zu kennzeichnen, der höchstwahrscheinlich als Ausgangspunkt für den Branch verwendet wurde, der <commit-ish> erzeugt hat. Diese Wahl wird mit einer Heuristik getroffen: Wähle den Ref, der die Anzahl der Commits in der First-Parent-Historie von <commit-ish> minimiert und nicht in der First-Parent-Historie des Refs enthalten ist.

Betrachten Sie zum Beispiel die folgende Abbildung der First-Parent-Historien mehrerer Refs

*--*--*--*--*--* refs/heads/A
\
 \
  *--*--*--* refs/heads/B
   \     \
    \     \
     *     * refs/heads/C
      \
       \
	*--* refs/heads/D

Wenn A, B und C die gefilterten Referenzen sind und die Formatzeichenkette %(refname):%(is-base:D) lautet, wäre die Ausgabe

refs/heads/A:
refs/heads/B:(D)
refs/heads/C:

Dies liegt daran, dass die First-Parent-Historie von D die früheste Schnittmenge mit den First-Parent-Historien der gefilterten Refs an einem gemeinsamen First-Parent-Vorfahren von B und C hat und bei Gleichstand der früheste Ref in der sortierten Reihenfolge gewählt wird.

Beachten Sie, dass dieses Token nicht angezeigt wird, wenn die First-Parent-Historie von <commit-ish> keine Schnittmenge mit den First-Parent-Historien der gefilterten Refs aufweist.

describe[:<option>,...]

Ein menschenlesbarer Name, ähnlich wie bei git-describe[1]; eine leere Zeichenkette für nicht beschreibbare Commits. Die describe Zeichenkette kann von einem Doppelpunkt und einem oder mehreren durch Kommas getrennten Optionen gefolgt werden.

tags=<bool-value>

Anstatt nur annotierte Tags zu berücksichtigen, werden auch Lightweight-Tags berücksichtigt; siehe die entsprechende Option in git-describe[1] für Details.

abbrev=<number>

Verwenden Sie mindestens <number> Hexadezimalziffern; siehe die entsprechende Option in git-describe[1] für Details.

match=<pattern>

Nur Tags berücksichtigen, die dem glob(7) <pattern> entsprechen, wobei das Präfix refs/tags/ ausgeschlossen ist; siehe die entsprechende Option in git-describe[1] für Details.

exclude=<pattern>

Keine Tags berücksichtigen, die dem glob(7) <pattern> entsprechen, wobei das Präfix refs/tags/ ausgeschlossen ist; siehe die entsprechende Option in git-describe[1] für Details.

Zusätzlich zu den oben genannten können für Commit- und Tag-Objekte die Headerfeldnamen (tree, parent, object, type und tag) verwendet werden, um den Wert im Headerfeld anzugeben. Die Felder tree und parent können auch mit den Modifikatoren :short und :short=<length> wie objectname verwendet werden.

Für Commit- und Tag-Objekte entsprechen die Sonderfelder creatordate und creator dem entsprechenden Datum oder dem Namen-E-Mail-Datums-Tupel aus den Feldern committer oder tagger, abhängig vom Objekttyp. Diese sind für die Arbeit mit einer Mischung aus annotierten und leichten Tags gedacht.

Für Tag-Objekte erweitert sich ein mit einem Sternchen (*) präfixierter fieldname auf den Wert des fieldname des "peeled" Objekts, anstatt auf den des Tag-Objekts selbst.

Felder, die ein Namens-E-Mail-Datums-Tupel als Wert haben (author, committer und tagger), können mit name, email und date angehängt werden, um die benannte Komponente zu extrahieren. Für E-Mail-Felder (authoremail, committeremail und taggeremail) kann :trim angehängt werden, um die E-Mail ohne spitze Klammern zu erhalten, und :localpart, um den Teil vor dem @-Symbol aus der getrimmten E-Mail zu erhalten. Zusätzlich dazu können die Optionen :mailmap und die entsprechenden :mailmap,trim und :mailmap,localpart (die Reihenfolge spielt keine Rolle) verwendet werden, um die Werte des Namens und der E-Mail gemäß der Datei .mailmap oder gemäß der in den Konfigurationsvariablen mailmap.file oder mailmap.blob festgelegten Datei zu erhalten (siehe gitmailmap[5]).

Die Rohdaten in einem Objekt sind raw.

raw:size

Die Rohdaten-Größe des Objekts.

Beachten Sie, dass --format=%(raw) nicht mit --python, --shell, --tcl verwendet werden kann, da solche Sprachen möglicherweise keine beliebigen Binärdaten in ihrem Zeichenkettenvariablentyp unterstützen.

Die Nachricht in einem Commit- oder Tag-Objekt ist contents, wovon contents:<part> verwendet werden kann, um verschiedene Teile daraus zu extrahieren

contents:size

Die Größe der Commit- oder Tag-Nachricht in Bytes.

contents:subject

Der erste Absatz der Nachricht, der typischerweise eine einzelne Zeile ist, wird als "Betreff" der Commit- oder Tag-Nachricht genommen. Anstelle von contents:subject kann auch das Feld subject verwendet werden, um dasselbe Ergebnis zu erzielen. :sanitize kann an subject angehängt werden, um eine für Dateinamen geeignete Betreffzeile zu erhalten.

contents:body

Der Rest der Commit- oder Tag-Nachricht, der dem "Betreff" folgt.

contents:signature

Die optionale GPG-Signatur des Tags.

contents:lines=<n>

Die ersten <n> Zeilen der Nachricht.

Zusätzlich werden die von git-interpret-trailers[1] interpretierten Trailer als trailers[:<option>,...] (oder durch Verwendung des historischen Alias contents:trailers[:<option>,...]) erhalten. Für gültige <option> Werte siehe den Abschnitt trailers in git-log[1].

Für Sortierzwecke werden Felder mit numerischen Werten numerisch sortiert (objectsize, authordate, committerdate, creatordate, taggerdate). Alle anderen Felder werden zur Sortierung in ihrer Byte-Wert-Reihenfolge verwendet.

Es gibt auch eine Option zur Sortierung nach Versionen, dies kann durch Verwendung des Feldnamens version:refname oder seines Alias v:refname geschehen.

In jedem Fall verursacht ein Feldname, der sich auf ein Feld bezieht, das für das vom Ref referenzierte Objekt nicht anwendbar ist, keinen Fehler. Stattdessen wird eine leere Zeichenkette zurückgegeben.

Als Sonderfall für Datumsfelder können Sie ein Format für das Datum angeben, indem Sie : gefolgt von einem Datumsformatnamen hinzufügen (siehe die Werte, die die Option --date von git-rev-list[1] akzeptiert). Wenn diese Formatierung in einem --sort Schlüssel bereitgestellt wird, werden die Referenzen nach dem Byte-Wert der formatierten Zeichenkette und nicht nach dem numerischen Wert des zugrundeliegenden Zeitstempels sortiert.

Einige Atome wie %(align) und %(if) erfordern immer ein passendes %(end). Wir nennen sie "öffnende Atome" und bezeichnen sie manchmal als %($open).

Wenn eine sprachspezifische Zitierung aktiv ist, wird alles zwischen einem öffnenden Atom der obersten Ebene und seinem passenden %(end) gemäß der Semantik des öffnenden Atoms ausgewertet und nur sein Ergebnis von der obersten Ebene wird zitiert.

BEISPIELE

Ein Beispiel zur direkten Erzeugung von formatiertem Text. Zeigt die neuesten 3 getaggten Commits an

#!/bin/sh

git for-each-ref --count=3 --sort='-*authordate' \
`--format='From: %(*authorname) %(*authoremail)
Subject: %(*subject)
Date: %(*authordate)
Ref: %(*refname)

%(*body)
' 'refs/tags'

Ein einfaches Beispiel, das die Verwendung von Shell-Eval auf der Ausgabe zeigt und die Verwendung von --shell demonstriert. Listet die Präfixe aller Heads auf

#!/bin/sh

git for-each-ref --shell --format="ref=%(refname)" refs/heads | \
while read entry
do
	eval "$entry"
	echo `dirname $ref`
done

Ein etwas aufwendigerer Bericht über Tags, der zeigt, dass das Format ein vollständiges Skript sein kann

#!/bin/sh

fmt='
	r=%(refname)
	t=%(*objecttype)
	T=${r#refs/tags/}

	o=%(*objectname)
	n=%(*authorname)
	e=%(*authoremail)
	s=%(*subject)
	d=%(*authordate)
	b=%(*body)

	kind=Tag
	if test "z$t" = z
	then
		# could be a lightweight tag
		t=%(objecttype)
		kind="Lightweight tag"
		o=%(objectname)
		n=%(authorname)
		e=%(authoremail)
		s=%(subject)
		d=%(authordate)
		b=%(body)
	fi
	echo "$kind $T points at a $t object $o"
	if test "z$t" = zcommit
	then
		echo "The commit was authored by $n $e
at $d, and titled

    $s

Its message reads as:
"
		echo "$b" | sed -e "s/^/    /"
		echo
	fi
'

eval=`git for-each-ref --shell --format="$fmt" \
	--sort='*objecttype' \
	--sort=-taggerdate \
	refs/tags`
eval "$eval"

Ein Beispiel zur Demonstration der Verwendung von %(if)...%(then)...%(else)...%(end). Dies fügt dem aktuellen Branch einen Stern voran.

git for-each-ref --format="%(if)%(HEAD)%(then)* %(else)  %(end)%(refname:short)" refs/heads/

Ein Beispiel zur Demonstration der Verwendung von %(if)...%(then)...%(end). Dies gibt den Authornamen aus, falls vorhanden.

git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Authored by: %(authorname)%(end)"

HINWEISE

Beachten Sie, dass die Größen von Objekten auf der Festplatte genau gemeldet werden, aber Vorsicht ist geboten bei Schlussfolgerungen darüber, welche Refs oder Objekte für die Festplattennutzung verantwortlich sind. Die Größe eines gepackten Nicht-Delta-Objekts kann viel größer sein als die Größe von Objekten, die dagegen deltabasiert sind, aber die Wahl, welches Objekt die Basis und welches das Delta ist, ist willkürlich und kann sich bei einem Repack ändern.

Beachten Sie außerdem, dass mehrere Kopien eines Objekts in der Objektdatenbank vorhanden sein können; in diesem Fall ist undefiniert, welche Kopie ihre Größe oder Delta-Basis gemeldet wird.

ANMERKUNGEN

Bei der Kombination mehrerer --contains- und --no-contains-Filter werden nur Referenzen angezeigt, die mindestens einen der --contains-Commits enthalten und keinen der --no-contains-Commits enthalten.

Bei der Kombination mehrerer --merged- und --no-merged-Filter werden nur Referenzen angezeigt, die von mindestens einem der --merged-Commits erreichbar sind und von keinem der --no-merged-Commits.

SIEHE AUCH

GIT

Teil der git[1] Suite