¿Cómo puedo saber si una label de git determinada es anotada o ligera?

git tag y enumera mis tags actuales:

 1.2.3 1.2.4 

¿Cómo puedo determinar cuál de estos está anotado y cuál es liviano?

git for-each-ref te dice qué es cada reference por defecto, su id y su tipo. Para restringirlo a solo tags, haz git for-each-ref refs/tags .

El command git show-ref -d --tags hace, ya que las tags livianas aparecen una vez en la salida y las tags anotadas aparecen dos veces. Además, solo las tags anotadas incluyen el operador de desreference "^ {}" en la salida.

 588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.3 7fe2caaed1b02bb6dae0305c5c0f2592e7080a7a refs/tags/1.2.4 588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.4^{} 

Y ese resultado puede ser masajeado con los commands orderar unix, sed, cut y uniq para hacer que la salida sea más legible:

 git show-ref -d --tags | cut -b 42- | # to remove the commit-id sort | sed 's/\^{}//' | # remove ^{} markings uniq -c | # count identical lines sed 's/2\ refs\/tags\// a /' | # 2 identicals = annotated sed 's/1\ refs\/tags\//lw /' 

Para mi repository original (a partir de mi pregunta) da como resultado esto:

  lw 1.2.3 a 1.2.4 

(por ej., 1.2.3 era "liviano" y "1.2.4" estaba anotado).

Por favor, intente usar git describe

https://git-scm.com/docs/git-describe

Por defecto (sin –all o –tags) git describe solo muestra tags anotadas.

Obtenga el nombre de la label (digamos foo ) y luego haga un git cat-file -t foo . Si se trata de una label anotada, cat-file le dirá que es una "label". Si es una label simple, cat-file te dirá que es un "commit".

Actualización: Como dijo oxymoron en su comentario, el git show también funciona pero te da más información que solo qué tipo de label es.