¿En qué se diferencia una etiqueta de una rama en Git? ¿Cuál debería usar aquí?
Tengo algunas dificultades para entender cómo usar etiquetas versus ramas engit.
Acabo de mover la versión actual de nuestro código decvagit, y ahora voy a trabajar en un subconjunto de ese código para una característica particular. Algunos otros desarrolladores también trabajarán en esto, pero no a todos los desarrolladores de nuestro grupo les importará esta característica. ¿Debería crear una rama o una etiqueta? ¿En qué situaciones debería utilizar uno frente al otro?
Desde el punto de vista teórico :
- Las etiquetas son nombres simbólicos para una revisión determinada . Siempre apuntan al mismo objeto (normalmente: a la misma revisión); no cambian.
- Las ramas son nombres simbólicos de la línea de desarrollo . Se crean nuevas confirmaciones encima de la rama. El puntero de rama avanza naturalmente, apuntando a confirmaciones cada vez más nuevas.
Desde el punto de vista técnico :
- las etiquetas residen en
refs/tags/
el espacio de nombres y pueden apuntar a objetos de etiqueta (etiquetas anotadas y, opcionalmente, firmadas con GPG) o directamente a un objeto de confirmación (etiqueta liviana menos utilizada para nombres locales) o, en casos muy raros, incluso a un objeto de árbol o un objeto de blob (por ejemplo, firma GPG). ). - Las ramas residen en
refs/heads/
el espacio de nombres y solo pueden apuntar a objetos de confirmación . ElHEAD
puntero debe hacer referencia a una rama (referencia simbólica) o directamente a una confirmación (HEAD separada o rama sin nombre). - Las ramas de seguimiento remoto residen en
refs/remotes/<remote>/
el espacio de nombres y siguen las ramas ordinarias en el repositorio remoto<remote>
.
Consulte también la página de manual de gitglossary :
rama
Una "sucursal" es una línea activa de desarrollo. La confirmación más reciente en una rama se conoce como la punta de esa rama. La punta de la rama tiene como referencia una cabeza de rama, que avanza a medida que se realiza un desarrollo adicional en la rama. Un único repositorio de git puede rastrear un número arbitrario de ramas, pero su árbol de trabajo está asociado solo con una de ellas (la rama "actual" o "desprotegida"), y HEAD apunta a esa rama.
etiqueta
Una referencia que apunta a una etiqueta u objeto de confirmación. A diferencia de un encabezado, una etiqueta no se modifica mediante una confirmación. Las etiquetas (no los objetos de etiqueta) se almacenan en
$GIT_DIR/refs/tags/
. [...]. Una etiqueta se utiliza normalmente para marcar un punto particular en la cadena de ascendencia de confirmación.objeto de etiqueta
Un objeto que contiene una referencia que apunta a otro objeto, que puede contener un mensaje como un objeto de confirmación. También puede contener una firma (PGP), en cuyo caso se denomina "objeto de etiqueta firmado".
Una etiqueta representa una versión de una rama particular en un momento determinado. Una rama representa un hilo de desarrollo separado que puede ejecutarse simultáneamente con otros esfuerzos de desarrollo en la misma base de código. Los cambios realizados en una rama pueden eventualmente fusionarse nuevamente en otra rama para unificarlos.
Por lo general , etiquetará una versión particular para poder recrearla; por ejemplo, esta es la versión que enviamos a XYZ Corp. Una rama es más una estrategia para proporcionar actualizaciones continuas sobre una versión particular del código mientras se continúa desarrollándolo. Creará una rama de la versión entregada, continuará el desarrollo en la línea principal, pero corregirá errores en la rama que representa la versión entregada. Con el tiempo, fusionarás estas correcciones de errores nuevamente en la línea principal. A menudo utilizarás tanto la ramificación como el etiquetado juntos. Tendrá varias etiquetas que pueden aplicarse tanto a la línea principal como a sus ramas, marcando versiones particulares (las entregadas a los clientes, por ejemplo) a lo largo de cada rama que desee recrear, para entrega, diagnóstico de errores, etc.
En realidad, es más complicado que esto, o tan complicado como quieras, pero estos ejemplos deberían darte una idea de las diferencias.
Ninguna metáfora es perfecta, pero puedes imaginar tu repositorio como un libro que narra el progreso de tu proyecto.
Sucursales
Puedes pensar en una rama como uno de esos marcadores adhesivos :
Un repositorio nuevo tiene solo uno de esos (llamado ), que se mueve automáticamente a la última página (piense en commit ) que haya escrito. Sin embargo, eres libre de crear y utilizar más marcadores para marcar otros puntos de interés en el libro y poder volver a ellos rápidamente.master
main
Además, siempre puedes mover un marcador en particular a otra página del libro (usando git-reset
, por ejemplo); Los puntos de interés suelen variar con el tiempo.
Etiquetas
Puedes pensar en las etiquetas como títulos de capítulos .
Puede contener un título (piense en etiquetas anotadas ) o no. Una etiqueta es similar pero diferente a una rama en que marca un punto de interés histórico en el libro. Para mantener su aspecto histórico, una vez que haya compartido una etiqueta (es decir, la haya colocado en un control remoto compartido), se supone que no debe moverla a ningún otro lugar del libro.