He leído Git de ramas y etiquetas mejores prácticas y los comentarios de etiquetado git - las mejores prácticas , pero no veo una respuesta directa a algo que yo he preguntado durante mucho tiempo:
¿Por qué Git tiene etiquetas? (en lugar de solo ramas)
Parecen ser ciudadanos de segunda clase, o al menos "diferentes". No se envían a menos que lo especifiques explícitamente. La eliminación de etiquetas remotas no causa la eliminación en repositorios posteriores.
Este último punto fue un problema recientemente, ya que alguien empujó un montón de etiquetas de basura con toneladas de confirmaciones de otro repositorio. Podríamos eliminarlos en sentido ascendente y activar los commits, pero eso no se propagaría, y la próxima vez que alguien empujara una etiqueta git push --tags
, repugnaría esas etiquetas de basura y commits. Así que tuvimos que asegurarnos de que todos los eliminaran.
¿Cuándo y por qué usaría una etiqueta en lugar de una rama?
Respuestas:
Esto se hace a propósito .
No estoy de acuerdo con la respuesta de lxrec sobre que git tiene malos valores predeterminados. Si sigue la lista de correo, puede ver que los desarrolladores de git realmente se preocupan por tener valores predeterminados razonables. ¿Tendría sentido tenerlo
--ff-only
por defecto? No lo creo.Las etiquetas permiten tener anotaciones para su propia copia de desarrollo local. No me gustaría ver que mis
why_does_it_break_here
y mistodo_fix_formatting
etiquetas sean empujadas sin mi consentimiento (esos no son nombres de etiquetas reales). Etiquetar un lanzamiento, por otro lado, es algo que ocurre con menos frecuencia, y tiene sentido requerir un impulso explícito (o usar un alias).No veo una diferencia importante entre las etiquetas y las ramas, y cómo se comporta push / fetch. En su ejemplo, si las etiquetas de basura hubiesen sido ramas, ¿la eliminación se propagaría como usted pretendía?
Generalmente hablando:
fuente
git push --tags
, pero las etiquetas locales no. Ha pasado un tiempo desde que usé git con ira, eso fue mucho antes de Git 1.0.1) ¿Por qué los git tags son ciudadanos de segunda clase?
Porque lamentablemente, git tiene muchos valores predeterminados malos. Por mucho que me guste, simplemente no es una herramienta intuitiva o amigable para los novatos. Casi todo el mundo tiene que configurar git configs o alias o scripts que usan una docena de las - opciones (como --ff-only) para hacer que git comience a comportarse de la manera que realmente quiere. Las etiquetas son solo un ejemplo más.
2) ¿Por qué usaría una etiqueta git en lugar de una rama?
Una rama está destinada a marcar una confirmación sobre la que realiza otras confirmaciones. Cuando realiza una nueva confirmación a esa rama, la rama misma se "mueve" para que apunte a la nueva confirmación.
Una etiqueta, por otro lado, marca una confirmación, y luego sigue marcando esa misma confirmación casi para siempre (en teoría). El uso más común es etiquetar confirmaciones con sus versiones de lanzamiento oficiales cada vez que lanza una nueva versión a producción.
Usamos ramas y etiquetas para nuestras versiones de lanzamiento. La rama simplemente representa la versión mayor / menor, mientras que las etiquetas especifican versiones de parches / compilación dentro de esa versión mayor / menor. Entonces, si necesitamos aplicar una corrección de errores a una versión anterior, simplemente seleccionamos el compromiso de corrección de errores del maestro en la rama apropiada, luego etiquetamos el nuevo compromiso con el nuevo número de versión que obtiene durante la implementación.
fuente