TLDR sin anotaciones: commit; anotado: cometer, autor, fecha, comentario (opcional)
Antony Hatchkins
Respuestas:
255
TL; DR
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.
Más información sobre las etiquetas ligeras
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:
Cuando lo use 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).
Cuando lo use git tag -a <tagname>, Git le solicitará una anotación a menos que también haya usado el indicador -m para proporcionar un mensaje.
Cuando lo use git tag -a -m <msg> <tagname>, Git etiquetará el commit y lo anotará con el mensaje proporcionado.
Cuando lo use 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.
¿Hay alguna diferencia entre una etiqueta "anotación" y un mensaje de confirmación?
Steve Bennett
3
@SteveBennett Sí. Una anotación de etiqueta no es un mensaje de confirmación. No puedes verlo con git-log (1); necesitas usar git-show (1).
Todd A. Jacobs
115
La diferencia entre las etiquetas "anotadas" y "ligeras" va más allá del mensaje. Puede tener una etiqueta anotada sin un mensaje ( git tag -a <tag> -m ''), pero una etiqueta anotada siempre tiene etiquetador (autor) y fecha .
Piotr Findeisen
1
Lo mismo para mi. Las etiquetas de versión generalmente tienen mensajes bastante inútiles (¿puede decir más que el nombre? ¿Para qué?). Desafortunadamente, esta respuesta de alta votación no menciona esta diferencia.
Piotr Findeisen
44
Otra cosa importante a tener en cuenta es que cuando empuja sus etiquetas a un repositorio remoto utilizando git push --follow-tags, solo se empujarán las etiquetas anotadas.
Xatoo
209
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.
Esto es mucho más claro que la respuesta actualmente aceptada. Gracias.
Reece
43
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.
Respuestas:
TL; DR
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.
Más información sobre las etiquetas ligeras
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.
fuente
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: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-1para etiquetas livianas, el SHA-1 apunta directamente a una confirmación:
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.
contiene el SHA del objeto de etiqueta anotado:
y luego podemos obtener su contenido con:
salida de muestra:
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:
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?
fuente
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.
fuente