git describe

Inspección y comparación

Da a un commit un nombre legible basado en el tag más cercano


El comando 'git describe' nombra un commit a partir del tag más cercano que alcanza: el propio tag si el commit está etiquetado, si no tag-N-gHASH (N commits después del tag y luego el hash abreviado). Los scripts de build lo usan para poner versión a cada build. Por defecto solo usa tags anotados.

Sinopsis

git describe [--tags] [--always] [--dirty] [--abbrev=<n>] [<commit-ish>...]
[ ] opcional| o<arg> valor a sustituir... repetible--flag opción

Opciones

Haz clic en una opción para desplegarla

Principiante (3)

Usa cualquier tag, incluidos los ligeros, no solo los anotados.

Cuando haga faltaCuando tu proyecto usa tags ligeros

Ejemplo

git describe --tags

Muestra el hash abreviado del commit cuando ningún tag puede describirlo.

RecomendadoNo fallar nunca: imprimir el hash corto si no hay tag

Ejemplo

git describe --always

Añade -dirty cuando el directorio de trabajo tiene cambios sin confirmar.

RecomendadoSeñalar builds hechos con cambios sin confirmar

Ejemplo

git describe --dirty

Elegir la opción adecuada

Leer un nombre de describe

v1.0-2-g1a2b3c4

ComandoSignificado
v1.0El tag más cercano
2Commits desde ese tag
g1a2b3c4«g» de git + el hash abreviado
-dirtyCambios sin confirmar (con --dirty)

Ejemplos

Describir HEAD

git describe

v1.0-2-g1a2b3c4: dos commits después de v1.0.


Incluir tags ligeros

git describe --tags

Tener en cuenta también los tags creados sin -a.


No fallar nunca

git describe --always --dirty

El hash si no hay tag, -dirty si hay ediciones locales.

Ejemplos de flujos de trabajo

1
git describe --tags --always --dirty

Calcular la cadena de versión

2
echo "$(git describe --tags --always)" > version.txt

Escribirla en el build

Solución de problemas

fatal: No names found, cannot describe anything.

Causa: El repositorio no tiene tags

Crea uno (git tag -a v0.1 -m ...) o usa --always

fatal: No annotated tags can describe ...

Causa: Solo existen tags ligeros

Usa --tags, o vuelve a crear el tag con -a

Consejos y trampas

Buenas prácticas

  • ✓Usa tags anotados para las versiones, así describe funciona sin --tags.
  • ✓Usa --always en scripts para que nunca fallen.

Errores comunes

  • ✗Obtener "No names found" porque el proyecto solo tiene tags ligeros — añade --tags.
  • ✗Leer la g de -g1a2b3c4 como parte del hash: solo significa «git».

Preguntas frecuentes

A:

Usa el tag con menos commits entre él y el commit descrito.