Aktuellen Mercurial Revision Hash drucken?

124

Gibt es eine bessere Möglichkeit, den aktuellen Revisions-Hash in Mercurial zu extrahieren als

hg log -l1|grep changeset|cut -d: -f3

?

Ein Teil meines Webapp-Bereitstellungsskripts "markiert" den hochgeladenen App-Tarball mit seinem einzigartigen Revisions-Hash.

rentzsch
quelle
2
Beachten Sie, dass hg log -l 1Sie den neuesten Änderungssatz erhalten, nicht unbedingt den, auf den Sie derzeit aktualisiert sind! Das Flag -f beschränkt die Ausgabe des hg-Protokolls auf Vorfahren des aktuellen Arbeitsverzeichnisses und hg log -f -l1ist somit näher an Ihren Wünschen.
wasserdicht

Antworten:

196

Versuchen:

hg id -i

Beispiel:

$ hg id -i
adc56745e928
Ry4an Brase
quelle
22
Falls Benutzer die folgenden Lösungen verpassen, wenn Sie die vollständige Hash-Verwendung hg --debug id -iwünschen : Wenn Sie Vorlagenunterstützung verwenden möchten, verwenden hg parent --template '{node}' Sie Nicht verwenden hg log -l 1, es ist das neueste Repository-Änderungsset, nicht das aktuelle Änderungsset für Arbeitskopien.
Joseph Lisee
7
Die Verwendung von --debug in Skripten wird nicht empfohlen, da die Ausgabe mit Abwärtskompatibilität weniger sorgfältig gesteuert wird. Verwenden Sie die Vorlage. Wenn Sie dies mit Protokoll tun möchten, verwenden Sie .Punkt als Revision.
Ry4an Brase
Danke Ry4an, ich hatte keine Ahnung von "-r". Verweisen auf die aktuelle Revision der Arbeitskopie. Das scheint der bessere Schritt zu sein, als von "log" zu "parent" zu wechseln.
Joseph Lisee
Kein Problem. hg help revisionsund hg help revsetshat einige verrückte mächtige Abkürzungen wie diese.
Ry4an Brase
Aber es ist nicht die spezifische Antwort auf die Frage, weil AFAIK hg id -idruckt nur die kurzen (12 Zeichen) Form der globalen Hash - ID und da hg identifyfehlt --templateafaics gibt es keine Möglichkeit nur die Revision und nichts anderes zu extrahieren , da die Manpage sagt es druckt eine Zusammenfassung.
Shelby Moore III
41
hg --debug id -i

Dies gibt den langen Hash mit einem Plus aus, wenn nicht festgeschriebene Änderungen vorliegen.

Frank
quelle
Das scheint in 3.1.2 der Standard zu sein
NickD
1
Downvoting wegen Ry4ans Kommentar .
Shelby Moore III
20

Sie können --template mit dem übergeordneten Befehl verwenden. Ich verwende dies, um den langen Hash zu erhalten:

hg parent --template '{node}'
Schattenbrut
quelle
Die hg Manpage sagt hg parentsist DEPRECATED , wenn auch vielleicht , dass möglicherweise nicht der Fall gewesen wäre , wenn Sie diese Antwort geschrieben. Wenn es eine nicht festgeschriebene Zusammenführung gibt, gibt es zwei übergeordnete Revisionen .
Shelby Moore III
2
Kann uns jemand sagen, warum hg Eltern veraltet sind und was wir stattdessen verwenden sollen?
Vincent
17

Wenn man die Antworten und ihre Antworten zusammenfasst, scheint dies der beste Weg zu sein, um die eindeutige (nicht kurze) Kennung der aktuellen Version zu drucken :

hg log -l 1 --template '{node}\n' -r .
Rog
quelle
Hinweis , wenn es ein nicht gebundener merge , die .(Punkt) zeigt nur die erst Eltern von zwei Eltern der Arbeitsgruppe.
Shelby Moore III
9
hg log -l 1 --template '{node|short}\n'

Siehe die Dokumente , Absätze "Die Grundlagen des Templating" und die folgenden.

Alex Martelli
quelle
2
Ich wollte fast das, aber mit dem langen Hash. Aliasing, lidum log -l 1 --template '{node}\n'genau dies zu erreichen - drucken Sie die vollständige Revisions-ID aus.
Michael Ekstrand
6
Dies druckt den zuletzt gezogenen Änderungssatz. Unser Arbeitsverzeichnis könnte auf ein älteres Änderungsset aktualisiert werden. Verwenden Sie "hg id", um den Änderungssatz zu drucken, auf den wir aktualisiert wurden. Das einzige Problem ist, dass "hg id" weder Vorlagen unterstützt noch eine Option zum Drucken von langem Hash bietet (es sei denn, jemand weiß, wie das geht).
Eiver
1
Wie Eiver sagte, druckt dies nicht die tatsächliche Revision in Ihrer Arbeitskopie, sondern nur die neueste in Ihrem Repository. Da die Verwendung dieser Lösung Tracking-Fehler verursachen kann, habe ich diese Lösung abgelehnt.
Joseph Lisee
1
Das Gleiche gilt für Joes Downvoting. Auch @Eiver verwenden, hg --debug id -iwie an anderer Stelle gesagt.
AJP
3

Der spezifischste nicht DEPRECATED-Befehl, der aufgrund des Vorhandenseins von --templatenur Revisionsinformationen drucken kann, wenn diese Prägnanz erforderlich ist (wie in der Frage impliziert):

hg log -l 1 -b . -T '{rev}:{node|short}\n'

Oder für eine einzigartige lange Form von Hash:

hg log -l 1 -r . -T '{node}\n'

Das -b .oder branch(.)(Punkt für den Filialnamen) bedeutet den aktuellen Arbeitsverzeichniszweig und -r .die aktuelle Arbeitsverzeichnisrevision, die in und dokumentiert ist .hg help revsetshg help revisions

Hinweis , wenn es ein nicht gebundener merge , die .(Punkt) zeigt nur die erst Eltern von zwei Eltern der Arbeitsgruppe.

Shelby Moore III
quelle
3

Wie andere darauf hingewiesen haben, verwenden Sie nicht log -l.

Verwenden Sie hg log -r .diese Option , um detaillierte Informationen abzurufen, anstatt zu verwenden, hg idderen Ausgabe begrenzt ist und keine Vorlagen unterstützt. Sie können auch einen kleinen Alias ​​erstellen here = log -r .und verwenden hg here. Wenn Sie nur den Hash verwenden möchten hg log -r . --template '{node}\n'.

Gru
quelle
1

Wenn TortoiseHg verwendet wird, klicken Sie mit der rechten Maustaste auf die Revisionszeile in der Workbench und wählen Sie "Hash kopieren" (gemäß Dokumentation ).

Geben Sie hier die Bildbeschreibung ein

texnic
quelle