452 Stimmen

Was macht git rev-parse?

Was macht git rev-parse?

Ich habe die Manpage gelesen, aber es hat mehr Fragen als Antworten aufgeworfen. Dinge wie:

Wählen Sie Parameter aus und bearbeiten Sie diese

Bearbeiten? Was soll das bedeuten?

Ich benutze es als Auflöser (zu SHA1) von Revisionsangaben, wie

git rev-parse HEAD^

oder

git rev-parse origin/master

Ist das der Zweck des Befehls? Wenn nicht, ist es überhaupt richtig, es dafür zu verwenden?

372voto

Tuxdude Punkte 43955

git rev-parse ist ein Hilfsbefehl (plumbing), der hauptsächlich zur Manipulation verwendet wird.

Eine übliche Verwendung von git rev-parse ist das Drucken der SHA1-Hashes für einen Revisionsbezeichner. Darüber hinaus gibt es verschiedene Optionen, um diese Ausgabe zu formatieren, wie z.B. --short für das Drucken eines kürzeren eindeutigen SHA1.

Es gibt auch andere Anwendungsfälle (in Skripten und anderen Tools, die auf git aufbauen), für die ich verwendet habe:

  • --verify zum Überprüfen, ob das angegebene Objekt ein gültiges git-Objekt ist.
  • --git-dir zur Anzeige des absoluten/relativen Pfads des .git-Verzeichnisses.
  • Überprüfen, ob Sie sich derzeit in einem Repository befinden, mit --is-inside-git-dir oder in einem Arbeitsverzeichnis mit --is-inside-work-tree
  • Überprüfen, ob das Repository leer ist mit --is-bare-repository
  • Drucken von SHA1-Hashes von Zweigen (--branches), Tags (--tags) und die Verweise können auch basierend auf dem Remote gefiltert werden (mit --remote)
  • --parse-opt zum Normalisieren von Argumenten in einem Skript (ähnlich wie bei getopt) und zum Drucken eines Ausgabe-Strings, der mit eval verwendet werden kann

Massage bedeutet nur, dass es möglich ist, die Informationen von einer Form in eine andere umzuwandeln, d.h. ein Transformationsbefehl. Hier sind einige Beispiele, die mir einfallen:

  • den Namen eines Zweigs oder Tags in das SHA1 des Commits umwandeln, auf den er verweist, damit er an einen Hilfsbefehl übergeben werden kann, der nur SHA1-Werte für den Commit akzeptiert.
  • ein Revisionsbereich A..B für git log oder git diff in die entsprechenden Argumente für den darunter liegenden Hilfsbefehl als B ^A umwandeln

173voto

scanny Punkte 25388

Nur um auf die Etymologie des Befehlsnamens rev-parse einzugehen, verwendet Git konsequent den Begriff rev in Plumbing-Befehlen als Abkürzung für "Revision" und bedeutet im Allgemeinen den 40-Zeichen SHA1-Hash für einen Commit. Der Befehl rev-list druckt z. B. eine Liste von 40-Zeichen-Commit-Hashes für einen Branch oder ähnliches.

In diesem Fall könnte der Name zu parse-a-commitish-to-a-full-SHA1-hash erweitert werden. Obwohl der Befehl die verschiedenen Nebenfunktionen erwähnt Tuxdude's Antwort hat, scheint sein Namensgeber der Anwendungsfall zu sein, bei dem ein benutzerfreundlicher Verweis wie ein Branch-Name oder ein abgekürzter Hash in den eindeutigen 40-Zeichen SHA1-Hash umgewandelt wird, der für viele Programmier-/Plumbing-Zwecke am nützlichsten ist.

Ich dachte lange Zeit, es sei "reverse-parse" oder so, bevor ich es verstanden habe, und hatte dieselben Schwierigkeiten, die Begriffe "massaging" und "manipulation" zu verstehen :)

Nun ja, ich finde diese "parse-to-a-revision" Vorstellung eine befriedigende Möglichkeit, darüber nachzudenken, und ein zuverlässiges Konzept, um diesen Befehl abzurufen, wenn ich so etwas brauche. Häufig nimmt man beim Skripten mit Git einen benutzerfreundlichen Commit-Verweis als Benutzereingabe und möchte ihn in einen validierten und eindeutigen Arbeitsverweis auflösen, sobald man ihn erhalten hat. Andernfalls neigen Übersetzungs- und Validierungseingaben dazu, sich im Skript zu vermehren.

61voto

mitra Punkte 807

git rev-parse funktioniert auch, um den aktuellen Branch-Namen unter Verwendung der --abbrev-ref Flagge zu erhalten, wie:

git rev-parse --abbrev-ref HEAD

23voto

Sam Kah Chiin Punkte 3369

Zusammenfassung:

Es hilft Ihnen, die Commit-ID des aktuellen HEAD (d. h. des aktuellen Commits, den Sie gerade betrachten) zu finden

git rev-parse HEAD

ODER wenn Sie den kürzeren Commit möchten

git rev-parse --short HEAD

Wenn Sie den neuesten Commit in einem anderen Branch finden möchten, können Sie Folgendes tun

git rev-parse 
git rev-parse origin/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X