Was macht git rev-parse?

282

Was macht git rev-parsedas

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?

Talles
quelle
3
Soweit ich in der Manpage sehen kann, ist es ein größtenteils internes Dienstprogramm, um Revisions- / Objektnamen für andere Befehle zu analysieren. Was Sie tun, ist so ziemlich der Zweck des rev-parseBefehls. 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ürden git rev-parsebestimmte Parameter in der Befehlszeile vor dem ändern oder "massieren") aktuelles Programm heißt).
60
Die Manpage für git rev-parseist 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.
not2qubit
@ not2qubit Me: 'Danke für die Klarstellung, ich fühlte mich minderwertig.' Linus Torvalds: "Ich habe es noch einmal gelesen, genau welchen Teil haben Sie nicht verstanden?"
Brain2000

Antworten:

245

git rev-parseist ein Zusatzbefehl, der plumbinghauptsächlich zur Manipulation verwendet wird.

Eine gebräuchliche Verwendung git rev-parseist 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-dirzum Anzeigen des abs / relativen Pfads des .gitVerzeichnisses.
  • Überprüfen, ob Sie sich derzeit in einem Repository mit --is-inside-git-diroder in einem Arbeitsbaum befinden--is-inside-work-tree
  • Überprüfen, ob das Repo nackt ist --is-bare-repository
  • Das Drucken von SHA1-Hashes von Zweigen ( --branches), Tags ( --tags) und Refs kann auch basierend auf der Fernbedienung (mit --remote) gefiltert werden.
  • --parse-optum Argumente in einem Skript zu normalisieren (ähnlich wie getopt) und eine Ausgabezeichenfolge zu drucken, mit der verwendet werden kanneval

Massageimpliziert 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:

  • Ein Zweig- oder Tag-Name in die SHA1 des Commits, auf die er zeigt, damit er an einen Installationsbefehl übergeben werden kann, der nur SHA1-Werte für das Commit akzeptiert.
  • einen Revisionsbereich A..Bfür git logoder git diffin die entsprechenden Argumente für den zugrunde liegenden Installationsbefehl alsB ^A
Tuxdude
quelle
102

Um die Etymologie des Befehlsnamens rev-parsenäher zu erläutern , verwendet Git den Begriff revin 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.

scanny
quelle
9
Vielen Dank für die Erklärung, ich habe die Git-Docs kein bisschen verstanden: git-scm.com/docs/git-rev-parse
Jacob McKay
Können Sie uns ein Beispiel geben messagingund manipulationwie Sie bereits erwähnt haben?
Bo Chen
5
Mit anderen Worten, git rev-parseist die Abkürzung für git revision-parse. Es nimmt die angegebene Eingabe und gibt die entsprechende 40-stellige Revisions-ID zurück.
Jonathan Benn
36

git rev-parseFunktioniert auch zum Abrufen des aktuellen Filialnamens mithilfe des Flags --abbrev-ref wie:

git rev-parse --abbrev-ref HEAD
Mitra
quelle
Ist es möglich, auf diese Weise eine Commit-Nachricht zu erhalten?
Leo Droidcoder
2
@LeoDroidcoder versuchengit log --format=%B -n 1 <revision>
hipyhop