Imprimir Hash de revisión mercurial actual?

124

¿Hay una mejor manera de extraer el hash de revisión actual en Mercurial que

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

?

Parte de mi script de implementación de aplicaciones web "etiqueta" la aplicación tarball cargada con su hash de revisión único.

rentzsch
fuente
2
Tenga en cuenta que hg log -l 1le ofrece el conjunto de cambios más reciente, ¡no necesariamente el que está actualizando actualmente! El indicador -f limita la salida del registro hg a los antepasados ​​del directorio de trabajo actual, por lo que hg log -f -l1está más cerca de lo que desea.
resistente al agua

Respuestas:

196

Tratar:

hg id -i

Ejemplo:

$ hg id -i
adc56745e928
Ry4an Brase
fuente
22
En caso de que las personas pierdan las soluciones a continuación si desea el uso completo de hash: hg --debug id -isi desea usar el soporte de plantillas hg parent --template '{node}' No use hg log -l 1, es el último conjunto de cambios del repositorio, no el conjunto de cambios de la copia de trabajo actual.
Joseph Lisee
77
No se recomienda el uso de --debug en los scripts, esa salida se controla con menos cuidado con compatibilidad con versiones anteriores. Usa la plantilla. Si desea hacerlo con log, use .dot como la revisión.
Ry4an Brase
Gracias Ry4an no tenía idea sobre "-r". haciendo referencia a la revisión actual de la copia de trabajo. Ese parece ser el mejor movimiento que cambiar de "log" a "parent".
Joseph Lisee
No hay problema. hg help revisionsy hg help revsetstiene algunos atajos poderosos como ese.
Ry4an Brase
Pero no es el más respuesta concreta a la pregunta, porque yo sepa hg id -iimprime sólo el corto (12 caracteres) Forma de la ID de hash global y desde hg identifycarece --templateafaics no hay manera de extraer sólo la revisión y otra cosa desde la página del manual dice que Imprime un resumen.
Shelby Moore III
41
hg --debug id -i

Esto generará el hash largo, con un plus si hay cambios no confirmados.

Franco
fuente
Ese parece ser el valor predeterminado en 3.1.2
nickd
1
Votación negativa por el comentario de Ry4an .
Shelby Moore III
20

Puede usar --template con el comando padre, lo uso para obtener el hash largo:

hg parent --template '{node}'
engendro de las sombras
fuente
La página de manual de hg dice que hg parentsestá DEPRECADO , aunque quizás ese no haya sido el caso cuando escribió esta respuesta. Si hay una fusión no comprometida, hay dos revisiones principales .
Shelby Moore III
2
¿Alguien puede decirnos por qué hg parents está en desuso y qué debemos usar en su lugar?
Vincent
17

Resumiendo las respuestas y sus respuestas, parece que esta es la mejor manera de imprimir el identificador único (no de forma corta) de la versión actual :

hg log -l 1 --template '{node}\n' -r .
rog
fuente
Tenga en cuenta que si hay una fusión no confirmada , el .(punto) solo muestra el primer padre de dos padres del grupo de trabajo.
Shelby Moore III
9
hg log -l 1 --template '{node|short}\n'

Consulte los documentos , los párrafos "Conceptos básicos de las plantillas" y los siguientes.

Alex Martelli
fuente
2
Quería casi esto, pero con el largo hash. Alias lidpara log -l 1 --template '{node}\n'lograr exactamente esto: imprima la ID de revisión completa.
Michael Ekstrand
66
Esto imprime el conjunto de cambios extraído más reciente. Nuestro directorio de trabajo podría actualizarse a un conjunto de cambios más antiguo. Para imprimir el conjunto de cambios al que estamos actualizados, use "hg id". El único problema es que "hg id" no admite plantillas ni tiene una opción para imprimir hash largo (a menos que alguien sepa cómo hacerlo).
Eiver
1
Como dijo Eiver, esto no imprime la revisión real en su copia de trabajo, solo la última en su repositorio. Debido a que el uso de esta solución podría introducir errores de seguimiento, he rechazado esta solución.
Joseph Lisee
1
El mismo voto negativo de Joe. También @Eiver usa hg --debug id -icomo se dice en otra parte.
AJP
3

El comando no DEPRECADO más específico que, debido a la presencia de --template, solo puede imprimir información de revisión si se requiere esa concisión (como lo implica la pregunta):

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

O para una forma larga única de hash:

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

El -b .o branch(.)(punto para el nombre de la rama) significa la rama actual del directorio de trabajo y -r .significa la revisión actual del directorio de trabajo, que está documentada en hg help revsetsy hg help revisions.

Tenga en cuenta que si hay una fusión no confirmada , el .(punto) solo muestra el primer padre de dos padres del grupo de trabajo.

Shelby Moore III
fuente
3

Como otros han señalado, no lo use log -l.

Utilícelo hg log -r .para obtener información detallada, en lugar de utilizar hg idcuya salida es limitada y no admite plantillas. También puede crear un pequeño alias como here = log -r .y usar hg here. Si solo quieres usar hash hg log -r . --template '{node}\n'.

Gru
fuente
1

En caso de que se use TortoiseHg, haga clic con el botón derecho en la fila de revisión en el Workbench y seleccione "Copiar hash" (según la documentación ).

ingrese la descripción de la imagen aquí

texnic
fuente