He estado usando git durante aproximadamente un año y me gustaría usar el etiquetado para, bueno, etiquetar confirmaciones en diferentes versiones. Encontré mucha información sobre los comandos para usar para trabajar con etiquetas, pero lo que me gustaría saber es por qué usar el etiquetado si puedo crear una nueva rama llamada 1.1.0
y no tener que nublar mi mente con un nuevo conjunto de comandos git?
Tiene que haber muchas buenas razones para etiquetar en lugar de ramificar, pero me gustaría saber cuáles son esas ventajas.
Una etiqueta es inmutable .
Mientras que puede crear una rama llamada "1.0.0", usted, o cualquier persona con derechos de confirmación, también puede simplemente presionar esa rama (deliberadamente o no) y cambiar el significado de 1.0.0.
No puede hacer eso con una etiqueta, una vez que crea una etiqueta, eso es todo; La etiqueta 1.0.0 significa exactamente eso y no se puede cambiar * .
Esa es la principal diferencia práctica entre una etiqueta y una rama.
* Puede eliminar y volver a crear una etiqueta cambiando así una etiqueta, pero ciertamente no por accidente.
fuente
Tiendo a utilizar un flujo de trabajo que incorpora etiquetas y ramas. Las etiquetas son buenas para marcar código publicado o compilaciones de desarrollo notables. Las sucursales son buenas para realizar un seguimiento de todos los cambios relevantes para una versión específica.
Aquí hay una buena reseña sobre este tipo de flujo de trabajo: http://nvie.com/posts/a-successful-git-branching-model/
fuente
La rama y la etiqueta son lo mismo (puntero a una confirmación, también conocido como "ref" ), excepto que la rama se mueve automáticamente a la siguiente confirmación mientras que la etiqueta permanece para siempre 1 en la misma confirmación.
Al hacer un lanzamiento, generalmente desea marcar la "instantánea" del código a partir del cual se creó ese lanzamiento, y desea que permanezca marcado de esa manera incluso mientras continúa evolucionando el código, por lo que debe usar una etiqueta.
Si intentó usar una rama para eso, podría pasar inadvertidamente a una confirmación diferente, a partir de la cual no se creó la versión .
1 A menos que elimine la etiqueta, por supuesto.
NOTA: Me doy cuenta de que esta es una pregunta antigua, pero sentí que la similitud (y una diferencia crucial) entre las ramas y las etiquetas no se ha desarrollado en otras respuestas con tanta claridad como podría haber sido.
fuente
git commit
actualiza el encabezado de la rama extraída para hacer referencia a la nueva confirmación, sí, pero ninguna otra rama se mueve "automáticamente" a la siguiente confirmación. Debería aclarar el primer párrafo de su respuesta..git\refs\heads
contiene el hash de la confirmación. Los propios comprometidos no "recuerdan" qué rama los creó. Esto es diferente de Mercurial, por ejemplo, donde la información de la rama se puede escribir en los metadatos de la confirmación.Utiliza etiquetas para anotar confirmaciones importantes en el historial. "Este fue el compromiso exacto que usamos para esta versión ese jueves lluvioso cuando se rompió el servidor de compilación". Si usa una rama en lugar de una etiqueta, nunca podrá saber qué confirmación exacta usó. Solo sabe "Lanzamos la versión 1.1.0 en algún lugar de esta rama", a menos que anote manualmente el hash exacto para esa confirmación, por lo que usa etiquetas en primer lugar :)
fuente
Además de las otras respuestas, aquí están mis 2 centavos.
Respuesta corta: use etiquetas para versiones de lanzamiento
Respuesta larga: Creo que usar etiquetas para versiones de lanzamiento específicamente es mejor que usar ramas. Si necesita actualizar el relase, simplemente bifurque la confirmación etiquetada y una vez que termine de trabajar en esa rama (probablemente una rama de revisión), cree una nueva etiqueta en el encabezado de esa nueva rama con la nueva versión. Luego, vuelva a fusionar esa rama en master / development porque realmente no debería cambiar una versión de lanzamiento a menos que sea una revisión que probablemente debería fusionarse nuevamente en su código fuente. Luego elimine esa rama ya que ya no es necesaria. Si necesita aplicar otra revisión a esa nueva versión, repita los mismos pasos.
Consulte la sección del siguiente artículo que muestra cómo combinar una revisión con el flujo de trabajo de Git del autor: https://hackernoon.com/a-branching-and-releasing-strategy-that-fits-github-flow-be1b6c48eca2
fuente