git describe
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>...]Opciones
Elegir la opción adecuada
Leer un nombre de describe
v1.0-2-g1a2b3c4
| Comando | Significado |
|---|---|
v1.0 | El tag más cercano |
2 | Commits desde ese tag |
g1a2b3c4 | «g» de git + el hash abreviado |
-dirty | Cambios sin confirmar (con --dirty) |
Ejemplos
Describir HEAD
git describev1.0-2-g1a2b3c4: dos commits después de v1.0.
Incluir tags ligeros
git describe --tagsTener en cuenta también los tags creados sin -a.
No fallar nunca
git describe --always --dirtyEl hash si no hay tag, -dirty si hay ediciones locales.
Ejemplos de flujos de trabajo
git describe --tags --always --dirtyCalcular la cadena de versión
echo "$(git describe --tags --always)" > version.txtEscribirla 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
Usa el tag con menos commits entre él y el commit descrito.