Imprimer le hachage actuel de la révision de Mercurial?


124

Existe-t-il un meilleur moyen d'extraire le hachage de la révision actuelle dans Mercurial que

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

?

Une partie de mon script de déploiement d'application Web «balise» l'archive tar de l'application téléchargée avec son hachage de révision unique.


2
Notez que cela hg log -l 1vous donne le jeu de modifications le plus récent, pas nécessairement celui vers lequel vous êtes actuellement mis à jour! L'indicateur -f limite la sortie du journal hg aux ancêtres du répertoire de travail actuel, donc hg log -f -l1est plus proche de ce que vous voulez.
étanche le

Réponses:


196

Essayer:

hg id -i

Exemple:

$ hg id -i
adc56745e928

22
Dans le cas où les gens manqueraient les solutions ci-dessous si vous souhaitez utiliser le hachage complet: hg --debug id -isi vous voulez la prise en charge des modèles, utilisez hg parent --template '{node}' Ne pas utiliser hg log -l 1, c'est le dernier ensemble de modifications du référentiel, pas l'ensemble de modifications de la copie de travail actuelle.
Joseph Lisee

7
L'utilisation de --debug dans les scripts n'est pas recommandée, cette sortie est moins soigneusement contrôlée avec la compatibilité ascendante / r / t. Utilisez le modèle. Si vous voulez le faire avec le journal, utilisez le .point comme révision.
Ry4an Brase

Merci Ry4an je n'avais aucune idée de "-r". référençant la révision actuelle de la copie de travail. Cela semble être le meilleur moyen de passer de «journal» à «parent».
Joseph Lisee

Pas de problème. hg help revisionset hg help revsetsa des raccourcis fous puissants comme ça.
Ry4an Brase

Mais ce n'est pas la réponse la plus spécifique à la question, parce que afaik hg id -iimprime uniquement le court (12 caractères) sous forme de l'identifiant de hachage global et depuis hg identifymanque --templateafaics il n'y a pas moyen d'extraire simplement la révision et rien d' autre depuis la page man il imprime un résumé.
Shelby Moore III du

41
hg --debug id -i

Cela affichera le hachage long, avec un plus s'il y a des modifications non validées.


Cela semble être la valeur par défaut dans la version 3.1.2
pseudo

1
Vote négatif à cause du commentaire de Ry4an .
Shelby Moore III du

20

Vous pouvez utiliser --template avec la commande parent, j'utilise ceci pour obtenir le long hachage:

hg parent --template '{node}'

La page de manuel hg indique que hg parentsc'est DÉPRÉCIÉ , bien que cela n'ait peut-être pas été le cas lorsque vous avez écrit cette réponse. S'il existe une fusion non validée, il existe deux révisions parentes .
Shelby Moore III du

2
Quelqu'un peut-il nous dire pourquoi les parents hg sont obsolètes et que devrions-nous utiliser à la place?
Vincent le

17

En résumant les réponses et leurs réponses, il semble que ce soit la meilleure façon d'imprimer l' identifiant unique (et non abrégé) de la version actuelle :

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

Notez s'il y a une fusion non validée , le .(point) affiche uniquement le premier parent de deux parents du groupe de travail.
Shelby Moore III du

9
hg log -l 1 --template '{node|short}\n'

Voir la documentation , les paragraphes «Les bases de la création de modèles» et suivants.


2
Je voulais presque ça, mais avec le long hash. Aliasing lidpour log -l 1 --template '{node}\n'atteindre exactement cela - imprimez l'ID de révision complet.
Michael Ekstrand

6
Ceci imprime l'ensemble de modifications extrait le plus récent. Notre répertoire de travail pourrait être mis à jour avec un ensemble de modifications plus ancien. Pour imprimer l'ensemble de modifications vers lequel nous sommes mis à jour, utilisez "hg id". Le seul problème est que "hg id" ne prend pas en charge les modèles et n'a pas d'option pour imprimer un hachage long (à moins que quelqu'un ne sache comment faire cela).
Eiver

1
Comme Eiver l'a dit, cela n'imprime pas la révision réelle dans votre copie de travail, mais uniquement la dernière version de votre référentiel. Parce que l'utilisation de cette solution pourrait introduire des erreurs de suivi, j'ai voté contre cette solution.
Joseph Lisee

1
Le vote négatif de Ditto Joe. @Eiver utilise également hg --debug id -icomme cela est dit ailleurs.
AJP

3

La commande non-DEPRECATED la plus spécifique qui, en raison de la présence de, --templatene peut imprimer que les informations de révision si cette concision est requise (comme l'implique la question):

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

Ou pour une forme longue unique de hachage:

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

Le -b .ou branch(.)(point pour le nom de la branche) signifie la branche actuelle du répertoire de travail et -r .la révision actuelle du répertoire de travail, qui est documentée dans hg help revsetset hg help revisions.

Notez s'il y a une fusion non validée , le .(point) affiche uniquement le premier parent de deux parents du groupe de travail.


3

Comme d'autres l'ont souligné, ne l'utilisez pas log -l.

Utilisez hg log -r .pour obtenir des informations détaillées, par opposition à l'utilisation hg iddont la sortie est limitée et ne prend pas en charge les modèles. Vous pouvez également créer un petit alias comme here = log -r .et utiliser hg here. Si vous souhaitez uniquement utiliser le hachage hg log -r . --template '{node}\n'.


1

Si TortoiseHg est utilisé, cliquez avec le bouton droit sur la ligne de révision dans le Workbench et sélectionnez "Copier le hachage" (selon la documentation ).

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.