Si quiero etiquetar el commit actual. Sé que funcionan las dos líneas de comando siguientes:
git tag <tagname>
y
git tag -a <tagname> -m '<message>'
¿Cuál es la diferencia entre estos comandos?
Si quiero etiquetar el commit actual. Sé que funcionan las dos líneas de comando siguientes:
git tag <tagname>
y
git tag -a <tagname> -m '<message>'
¿Cuál es la diferencia entre estos comandos?
Respuestas:
La diferencia entre los comandos es que uno le proporciona un mensaje de etiqueta mientras que el otro no. Una etiqueta anotada tiene un mensaje que se puede mostrar con git-show (1), mientras que una etiqueta sin anotaciones es solo un puntero con nombre a una confirmación.
De acuerdo con la documentación : "Para crear una etiqueta ligera, no proporcione ninguna de las opciones -a, -s o -m, solo proporcione un nombre de etiqueta". También hay algunas opciones diferentes para escribir un mensaje en etiquetas anotadas:
git tag <tagname>
, Git creará una etiqueta en la revisión actual, pero no le pedirá una anotación. Se etiquetará sin un mensaje (esta es una etiqueta ligera).git tag -a <tagname>
, Git le solicitará una anotación a menos que también haya usado el indicador -m para proporcionar un mensaje.git tag -a -m <msg> <tagname>
, Git etiquetará el commit y lo anotará con el mensaje proporcionado.git tag -m <msg> <tagname>
, Git se comportará como si hubiera pasado la marca -a para anotación y use el mensaje proporcionado.Básicamente, solo equivale a si desea que la etiqueta tenga una anotación y alguna otra información asociada con ella o no.
git tag -a <tag> -m ''
), pero una etiqueta anotada siempre tiene etiquetador (autor) y fecha .
git push --follow-tags
, solo se empujarán las etiquetas anotadas.
Empuje etiquetas anotadas, mantenga un local ligero
man git-tag
dice:
Las etiquetas anotadas están destinadas al lanzamiento, mientras que las etiquetas livianas están destinadas a las etiquetas de objetos privados o temporales.
Y ciertos comportamientos diferencian entre ellos de manera que esta recomendación es útil, por ejemplo:
Las etiquetas anotadas pueden contener un mensaje, un creador y una fecha diferente del compromiso al que apuntan. Por lo tanto, puede usarlos para describir un lanzamiento sin realizar un compromiso de lanzamiento.
Las etiquetas livianas no tienen esa información adicional, y no la necesitan, ya que solo la usará usted mismo para desarrollarla.
git describe
sin opciones de línea de comando solo ve etiquetas anotadasDiferencias internas
las etiquetas ligeras y anotadas son un archivo debajo .git/refs/tags
que contiene un SHA-1
para etiquetas livianas, el SHA-1 apunta directamente a una confirmación:
git tag light
cat .git/refs/tags/light
imprime lo mismo que el SHA-1 de HEAD.
Así que no es de extrañar que no puedan contener otros metadatos.
las etiquetas anotadas apuntan a un objeto de etiqueta en la base de datos de objetos.
git tag -as -m msg annot
cat .git/refs/tags/annot
contiene el SHA del objeto de etiqueta anotado:
c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
y luego podemos obtener su contenido con:
git cat-file -p c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
salida de muestra:
object 4284c41353e51a07e4ed4192ad2e9eaada9c059f
type commit
tag annot
tagger Ciro Santilli <your@mail.com> 1411478848 +0200
msg
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
<YOUR PGP SIGNATURE>
-----END PGP SIGNAT
Y así es como contiene metadatos adicionales. Como podemos ver en la salida, los campos de metadatos son:
Un análisis más detallado del formato está presente en: ¿Cuál es el formato de un objeto de etiqueta git y cómo calcular su SHA?
Bonos
Determine si una etiqueta está anotada:
git cat-file -t tag
Salidas
commit
para peso ligero, ya que no hay ningún objeto de etiqueta, apunta directamente a la confirmacióntag
para anotado, ya que hay un objeto de etiqueta en ese casoEnumerar solo etiquetas livianas: ¿Cómo puedo enumerar todas las etiquetas livianas?
La gran diferencia se explica perfectamente aquí .
Básicamente, las etiquetas livianas son solo punteros a confirmaciones específicas. No se guarda más información ; Por otro lado, las etiquetas anotadas son objetos regulares , que tienen un autor y una fecha y se pueden referir porque tienen su propia clave SHA.
Si saber quién etiquetó qué y cuándo es relevante para usted, utilice etiquetas anotadas. Si solo desea etiquetar un punto específico en su desarrollo , sin importar quién y cuándo lo hizo, entonces las etiquetas livianas son lo suficientemente buenas.
Normalmente elegiría etiquetas anotadas, pero realmente depende del maestro Git del proyecto.