¿Qué hace git rev-parse?

285

¿Qué git rev-parsehacer?

He leído la página del manual, pero generó más preguntas que respuestas. Cosas como:

Seleccionar y masajear parámetros

Masaje ? Qué significa eso?

Estoy usando como solucionador (para SHA1) de especificadores de revisión, como

git rev-parse HEAD^

o

git rev-parse origin/master

¿Es este el propósito del comando? Si no, ¿es correcto usarlo para lograr esto?

talles
fuente
3
Hasta donde puedo ver en la página de manual, es una utilidad principalmente interna para analizar nombres de revisión / objeto para otros comandos. Lo que estás haciendo es más o menos el propósito del rev-parsecomando. También puede usarlo para normalizar una línea de comando, de modo que el programa real no tenga que comprender la complicada sintaxis de nombre de objeto de Git (usaría git rev-parsepara cambiar o "masajear" ciertos parámetros en la línea de comando antes del programa real se llama).
Ver también github.com/git/git/commit/…
VonC
6060
La página del manual para git rev-parsees ridículamente incomprensible. Me sorprende que nadie se haya molestado en reescribir esa jerga en algo legible para los humanos, incluso después de 5 años.
not2qubit
@ not2qubit Me: "Gracias por aclararme, me sentía inferior". Linus Torvalds: "Lo releí, ¿qué parte no comprendiste exactamente?"
Brain2000

Respuestas:

245

git rev-parsees un plumbingcomando auxiliar utilizado principalmente para la manipulación.

Un uso común de git rev-parsees imprimir los hashes SHA1 dados un especificador de revisión. Además, tiene varias opciones para formatear esta salida, como --shortpara imprimir un SHA1 único más corto.

También hay otros casos de uso (en scripts y otras herramientas creadas sobre git) que he usado para:

  • --verify para verificar que el objeto especificado es un objeto git válido.
  • --git-dirpara mostrar la ruta abs / relativa del .gitdirectorio.
  • Comprobando si actualmente está dentro de un repositorio usando --is-inside-git-diro dentro de un árbol de trabajo usando--is-inside-work-tree
  • Comprobando si el repositorio está desnudo usando --is-bare-repository
  • La impresión de hashes SHA1 de ramas ( --branches), etiquetas ( --tags) y las referencias también se pueden filtrar en función del control remoto (usando --remote)
  • --parse-optpara normalizar argumentos en un script (algo similar a getopt) e imprimir una cadena de salida que se puede usar coneval

Massagesimplemente implica que es posible convertir la información de un formulario a otro, es decir, un comando de transformación. Estos son algunos ejemplos rápidos que se me ocurren:

  • una rama o nombre de etiqueta en el SHA1 del commit al que apunta para que pueda pasarse a un comando de plomería que solo acepta valores SHA1 para el commit.
  • un rango de revisión A..Bpara git logo git diffen los argumentos equivalentes para el comando de fontanería subyacente comoB ^A
Tuxdude
fuente
102

Solo para profundizar en la etimología del nombre del comando rev-parse, Git usa constantemente el término reven comandos de plomería como abreviatura de "revisión" y generalmente significa el hash SHA1 de 40 caracteres para un commit. El comando, rev-listpor ejemplo, imprime una lista de hashes de confirmación de 40 caracteres para una rama o lo que sea.

En este caso, el nombre podría expandirse a parse-a-commitish-to-a-full-SHA1-hash. Si bien el comando tiene varias funciones auxiliares mencionadas en la respuesta de Tuxdude, su homónimo parece ser el caso de uso de la transformación de una referencia fácil de usar como un nombre de rama o hash abreviado en el hash SHA1 de 40 caracteres inequívoco más útil para muchas programaciones / plomería propósitos

Sé que estuve pensando que era algo de "análisis inverso" durante bastante tiempo antes de resolverlo y tuve el mismo problema para dar sentido a los términos "masaje" y "manipulación" :)

De todos modos, considero que esta noción de "analizar una revisión" es una forma satisfactoria de pensarlo y un concepto confiable para recordar este comando cuando necesito ese tipo de cosas. Con frecuencia, al crear scripts en Git, toma una referencia de confirmación fácil de usar como entrada del usuario y, en general, desea que se resuelva en una referencia de trabajo validada y sin ambigüedades tan pronto como sea posible. De lo contrario, la traducción y validación de entrada tiende a proliferar a través del script.

scanny
fuente
9
Gracias por la explicación, no entendí los git-docs ni
Jacob McKay
¿Puedes darnos un ejemplo messagingy manipulationcomo mencionas antes?
Bo Chen
55
En otras palabras, git rev-parsees la abreviatura de git revision-parse. Toma la entrada dada y devuelve la ID de revisión de 40 caracteres correspondiente.
Jonathan Benn
36

git rev-parseTambién funciona para obtener el nombre actual de la sucursal usando la bandera --abbrev-ref como:

git rev-parse --abbrev-ref HEAD
mitra
fuente
¿Es posible obtener un mensaje de confirmación de esta manera?
Leo Droidcoder
2
@LeoDroidcoder probargit log --format=%B -n 1 <revision>
hipyhop