Was macht git rev-parse
das
Ich habe die Manpage gelesen, aber sie hat mehr Fragen als Antworten aufgeworfen. Dinge wie:
Parameter auswählen und massieren
Massage ? Was bedeutet das?
Ich verwende als Resolver (für SHA1) Revisionsspezifizierer wie
git rev-parse HEAD^
oder
git rev-parse origin/master
Ist das der Zweck des Befehls? Wenn nicht, ist es überhaupt richtig, es zu verwenden, um dies zu erreichen?
git
git-rev-parse
Talles
quelle
quelle
rev-parse
Befehls. Sie können es auch verwenden, um eine Befehlszeile zu normalisieren, sodass das eigentliche Programm die komplizierte Objektnamensyntax von Git nicht verstehen muss (Sie würdengit rev-parse
bestimmte Parameter in der Befehlszeile vor dem ändern oder "massieren") aktuelles Programm heißt).git rev-parse
ist lächerlich unverständlich. Ich bin überrascht, dass sich niemand die Mühe gemacht hat, diesen Jargon auch nach 5 Jahren in etwas menschlich Lesbares umzuschreiben.Antworten:
git rev-parse
ist ein Zusatzbefehl, derplumbing
hauptsächlich zur Manipulation verwendet wird.Eine gebräuchliche Verwendung
git rev-parse
ist das Drucken der SHA1-Hashes mit einem Revisionsspezifizierer. Darüber hinaus stehen verschiedene Optionen zum Formatieren dieser Ausgabe zur Verfügung, z--short
zum Drucken eines kürzeren eindeutigen SHA1.Es gibt auch andere Anwendungsfälle (in Skripten und anderen Tools, die auf Git basieren), für die ich verwendet habe:
--verify
um zu überprüfen, ob das angegebene Objekt ein gültiges Git-Objekt ist.--git-dir
zum Anzeigen des abs / relativen Pfads des.git
Verzeichnisses.--is-inside-git-dir
oder in einem Arbeitsbaum befinden--is-inside-work-tree
--is-bare-repository
--branches
), Tags (--tags
) und Refs kann auch basierend auf der Fernbedienung (mit--remote
) gefiltert werden.--parse-opt
um Argumente in einem Skript zu normalisieren (ähnlich wiegetopt
) und eine Ausgabezeichenfolge zu drucken, mit der verwendet werden kanneval
Massage
impliziert nur, dass es möglich ist, die Informationen von einem Formular in ein anderes zu konvertieren, dh einen Transformationsbefehl. Dies sind einige kurze Beispiele, die mir einfallen:A..B
fürgit log
odergit diff
in die entsprechenden Argumente für den zugrunde liegenden Installationsbefehl alsB ^A
quelle
Um die Etymologie des Befehlsnamens
rev-parse
näher zu erläutern , verwendet Git den Begriffrev
in Installationsbefehlen konsequent als Abkürzung für "Revision" und bedeutet im Allgemeinen den 40-stelligen SHA1-Hash für ein Commit. Der Befehlrev-list
druckt beispielsweise eine Liste von 40-Zeichen-Commit-Hashes für einen Zweig oder was auch immer.In diesem Fall kann der Name auf erweitert werden
parse-a-commitish-to-a-full-SHA1-hash
. Während der Befehl die verschiedenen Zusatzfunktionen hat, die in der Antwort von Tuxdude erwähnt werden, scheint sein Namensvetter der Anwendungsfall zu sein, eine benutzerfreundliche Referenz wie einen Zweignamen oder einen abgekürzten Hash in den eindeutigen 40-stelligen SHA1-Hash umzuwandeln, der für viele Programmier- / Installationsarbeiten am nützlichsten ist Zwecke.Ich weiß, dass ich eine ganze Weile dachte, es sei "Reverse-Parse", bevor ich es herausfand und die gleichen Probleme hatte, die Begriffe "Massieren" und "Manipulation" zu verstehen :)
Wie auch immer, ich finde diesen Begriff "Parse-to-a-Revision" eine befriedigende Art, darüber nachzudenken, und ein verlässliches Konzept, um diesen Befehl in Erinnerung zu rufen, wenn ich so etwas brauche. In Git-Skripten verwenden Sie häufig eine benutzerfreundliche Festschreibungsreferenz als Benutzereingabe und möchten diese im Allgemeinen so bald wie möglich nach Erhalt in eine validierte und eindeutige Arbeitsreferenz auflösen. Andernfalls vermehrt sich die Übersetzung und Validierung von Eingaben im Skript.
quelle
messaging
undmanipulation
wie Sie bereits erwähnt haben?git rev-parse
ist die Abkürzung fürgit revision-parse
. Es nimmt die angegebene Eingabe und gibt die entsprechende 40-stellige Revisions-ID zurück.git rev-parse
Funktioniert auch zum Abrufen des aktuellen Filialnamens mithilfe des Flags --abbrev-ref wie:quelle
git log --format=%B -n 1 <revision>