git describe falla con "fatal: no se encontraron nombres, no se puede describir nada".

82

Estoy usando git 1.7.1 en Ubuntu 10.10 amd64, y estoy tratando de extraer el hash de mi repositorio HEAD para usarlo en una información de versión automatizada que compilo en mi proyecto.

En el pasado, esto siempre funcionaba usando

git describe --tags

sin embargo, git ahora está lanzando

fatal: No names found, cannot describe anything.

a mi. ¿Alguien tiene idea de lo que eso significa?

Google mostró solo algunos resultados y ninguna solución.

Philipp
fuente
¿De verdad quieres solo el hash o la información recopilada por git describe es útil para ti? La etiqueta más reciente y el número de confirmaciones intermedias son mucho más legibles por humanos que un SHA1. @nes: Es posible que desee recuperar su respuesta, ya que podría ser exactamente lo que necesita el OP; es difícil saberlo.
Cascabel
Recordatorio personal: Asegúrate de que el mando a distancia en realidad tiene etiquetas usando, por ejemplo git ls-remote --tags. En mi caso, el repositorio se ha migrado recientemente a un nuevo servidor y las etiquetas aún no se han transferido.
Gabriel Devillers

Respuestas:

71

Si desea la identificación de su, HEADentonces no la necesita describe, solo debe usar rev-parse.

git rev-parse HEAD

Si desea un hash abreviado, puede usar --short.

git rev-parse --short HEAD

Si desea que una "descripción" recurra a un hash abreviado si no puede encontrar ninguna etiqueta adecuada, puede usar --always.

git describe --always
CB Bailey
fuente
Sí, eso devuelve el hash, pero lo que realmente quiero es el hash abreviado que normalmente devuelve git-describe, que tiene como 8 caracteres más o menos
Philipp
1
@Philipp: git describenormalmente devuelve una cadena basada en un objeto de etiqueta que consta del nombre de la etiqueta, un número de confirmaciones y un sufijo basado en el hash. Normalmente no devuelve un hash abreviado, por lo que no estoy muy seguro de lo que está pidiendo.
CB Bailey
37

Parece que espera git-describeincluir la etiqueta más reciente y el número de confirmaciones desde esa etiqueta. Sin embargo, el fatal: No names foundmensaje significa que no tiene etiquetas en su repositorio. Debe tener al menos una etiqueta en el historial de confirmaciones para git describepoder decirle la última etiqueta.

Solo adivinando, pero tal vez etiquetó una confirmación en otro lugar, pero nunca empujó la etiqueta corriente arriba (¿quizás empujó la confirmación corriente arriba, la etiquetó más tarde y no repush?). Ahora, un nuevo clon de su flujo ascendente le está dando este error (ya que no tiene ninguna etiqueta). Si ese es el caso, puede intentarlo git push --tagsdesde el repositorio que tiene la etiqueta que desea (donde git describeestá haciendo lo que espera). Luego, hazlo git pullen el repositorio que no tiene la etiqueta.

comensal
fuente
37

He tenido este problema en un entorno de compilación de CI donde la herramienta de CI realizaba una clonación superficial del repositorio. Esto fue frustrante, porque en mi entorno de desarrollo, el comando

git describe --tags

me daría salida como

2.2.12-7-g8ec9d6c9

mientras que en el entorno de compilación obtendría el error "fatal no se encontraron nombres". Si intenté usar la etiqueta --always

git describe --tags --always

entonces simplemente obtendría el hash de la última confirmación, pero no la etiqueta más reciente antes de esa confirmación

8ec9d6c9

Realizando un git pull en el entorno de compilación no ayudaría, porque una vez que el repositorio se ha clonado superficialmente, las futuras extracciones no actualizarán las etiquetas.

La solución era asegurar que el clon inicial del reporto en el entorno de construcción no era un clon poco profundo (es decir, el git clonecomando no se utilizó con --depth, --shallow-sinceo --shallow-excludeparámetros).

Mike Pollitt
fuente
Tuve exactamente el mismo problema, ¡gracias por tu información!
Terenoth
5
Agregar git fetch --depth=500funcionó para mí con Travis-CI.
Matt Wilkie
¡Esa es la respuesta que yo también quería!
serkef
Sí, agregando esto para .travis.ymlarreglarlo para mí:git: depth: false
shacker
1
También puede simplemente hacer git fetch --tagsen el clon superficial, para buscar las etiquetas faltantes
Luke H
16

Esto sucede si no tiene etiquetas en su repositorio. Si el repositorio lo hace tener etiquetas, entonces estás en un clon sin profundidad (este es el valor por defecto en los sistemas IP, como TravisCI o acciones de GitHub).

Para obtener el historial (incluidas las etiquetas) desde un clon superficial, ejecute

git fetch --prune --unshallow

Por ejemplo, en el caso de las acciones de GitHub:

- uses: actions/checkout@v2
- run: git fetch --prune --unshallow

Luego, git describedebería funcionar nuevamente.

Danilo Bargen
fuente
2
Para las acciones de GitHub, --tagsse necesitaba en mi caso, entonces git fetch --prune --unshallow --tags. Vea este número
u-phoria
1
Si bien esto funcionará y resolverá el problema de los repositorios poco profundos en los flujos de trabajo de Github, ¿no va a traer --unshallowing realmente todo el historial del repositorio? Un gran repositorio con mucho historial causará problemas al agregar un cuello de botella a la canalización de CI.
Norman Pellet
1
Sí, esto buscará todo el historial. Dado que una etiqueta es un puntero a una revisión, esa revisión debe estar presente para que la etiqueta funcione correctamente.
Danilo Bargen
5

Tuve un problema similar mientras trabajaba en un trabajo de CI, el problema era que git clone o checkout scm used no recuperaba las etiquetas al clonar el repositorio.

Obteniendo sin etiquetas Obteniendo cambios ascendentes desde https: // github . **********

Puede habilitar la recuperación de etiquetas seleccionando "Comportamientos de clonación avanzados" y luego haciendo clic en recuperar etiquetas.

Screenshot_enabling_git_fetch

dheeraj tripathi
fuente
1

Si vino aquí debido a este mensaje de error en Travis CI, puede usar la siguiente configuración para evitar clones superficiales:

git:
  depth: false

Probé git fetch --tagspero eso no funcionó.

Stefan profanter
fuente
0

Este comando me ayudó: git fetch -t

vetalok
fuente
11
Edite con más información. Código de sólo y "Prueba esto" respuestas se desanimó , ya que no contienen el contenido de búsqueda, y no explican por qué alguien debe "probar esto".
Rick Smith
Por conciso que sea, esta es la única respuesta que menciona fetch.
Bjoern Dahlgren
El problema de OP era que su repositorio local no tenía etiquetas. Si el control remoto tiene, pero el local no, puede obtener las etiquetas usando git fetch -t o git fetch --tags
Wolfgang
Este comando realmente resolvió mi problema también y ninguna de las otras respuestas.
Marcos Fernandez Ramos