Tengo algunas dificultades para entender cómo usar etiquetas en lugar de ramas engit.
Acabo de mover la versión actual de nuestro código de cvs a git, y ahora voy a trabajar en un subconjunto de ese código para una característica en particular. Algunos otros desarrolladores también estarán trabajando en esto, pero no todos los desarrolladores de nuestro grupo se preocuparán por esta característica. ¿Debo estar creando una rama o una etiqueta? ¿En qué situaciones debo usar uno versus el otro?
git
version-control
branch
git-branch
git-tag
Bialecki
fuente
fuente
Respuestas:
Una etiqueta representa una versión de una rama en particular en un momento dado. 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 en una rama pueden eventualmente fusionarse nuevamente en otra rama para unificarlos.
Por lo general, podrás etiquetar una versión particular de modo que usted puede volver a crearlo, por ejemplo, esta es la versión que enviamos a XYZ Corp . Una ramaes más una estrategia para proporcionar actualizaciones continuas en una versión particular del código mientras se continúa desarrollando en él. Hará 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. Eventualmente, fusionará estas correcciones de errores nuevamente en la línea principal. A menudo utilizará tanto la ramificación como el etiquetado juntos. Tendrá varias etiquetas que pueden aplicarse tanto a la línea principal como a sus ramas que marcan versiones particulares (las entregadas a los clientes, por ejemplo) a lo largo de cada rama que desee recrear: para la entrega, el 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.
fuente
git checkout 88c9f229f
usted, puede hacer algo como estogit checkout your_tag
y pagará el commit aliasted por la etiqueta.Desde el punto de vista teórico :
Desde el punto de vista técnico :
refs/tags/
espacio de nombres y pueden apuntar a objetos de etiqueta ( etiquetas anotadas y opcionalmente firmadas por GPG) o directamente a un objeto de compromiso (etiqueta ligera menos utilizada para nombres locales), o en casos muy raros incluso a objetos de árbol u objetos de blob (por ejemplo, firma GPG )refs/heads/
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).refs/remotes/<remote>/
espacio de nombres y siguen ramas normales en el repositorio remoto<remote>
.Consulte también la página de manual de gitglossary :
fuente
git checkout <tag>
" generaría una rama anónima sin nombre (llamada 'HEAD separada') y seleccionaría el estado de la etiqueta. La creación de una nueva confirmación lo hace en esta rama sin nombre y no cambia a qué apunta la etiqueta.git checkout -b <branch name> <tag name>
Si piensa en su repositorio como un libro que narra el progreso de su proyecto ...
Ramas
Puedes pensar en una rama como uno de esos marcadores adhesivos :
Un nuevo repositorio tiene solo uno de esos (llamado
master
), que se mueve automáticamente a la última página (think commit ) que ha escrito. Sin embargo, puede crear y usar más marcadores para marcar otros puntos de interés en el libro, de modo que pueda volver a ellos rápidamente.Además, siempre puede mover un marcador particular a otra página del libro (usando
git-reset
, por ejemplo); Los puntos de interés suelen variar con el tiempo.Etiquetas
Puede pensar en las etiquetas como encabezados de capítulos .
Puede contener un título (piense en etiquetas anotadas ) o no. Una etiqueta es similar pero diferente a una rama, ya que marca un punto de interés histórico en el libro. Para mantener su aspecto histórico, una vez que ha compartido una etiqueta (es decir, la ha empujado a un control remoto compartido), no debe moverla a otro lugar del libro.
fuente
Lo que debe tener en cuenta, proveniente de CVS, es que ya no crea directorios al configurar una sucursal.
No más "etiqueta adhesiva" (que se puede aplicar a un solo archivo) o "etiqueta de rama".
Branch y tags son dos objetos diferentes en Git, y siempre se aplican al repositorio total .
Ya no debería (con SVN esta vez) estructurar explícitamente su repositorio con:
Esa estructura proviene del hecho de que CVS es un sistema de revisión y no un sistema de versión (ver Control de fuente vs. Control de revisión? ).
Eso significa que las ramas se emulan a través de etiquetas para CVS, copias de directorio para SVN.
Su pregunta tiene sentido si está acostumbrado a pagar una etiqueta y comienza a trabajar en ella .
Lo que no deberías;)
Se supone que una etiqueta representa un elemento inmutable contenido , que se usa solo para acceder a ella con la garantía de obtener el mismo contenido cada vez.
En Git, el historial de revisiones es una serie de confirmaciones, formando un gráfico.
Una rama es una ruta de ese gráfico
Ver la respuesta de Jakub Narębski para todos los tecnicismos, pero, francamente, en este punto, no necesita (todavía) todos los detalles;)
El punto principal es: una etiqueta que es un puntero simple a una confirmación, nunca podrá modificar su contenido. Necesitas una rama
En su caso, cada desarrollador trabaja en una función específica:
En lugar de rastrear directamente las ramas de sus colegas, puede rastrear solo la rama de un repositorio central "oficial" al cual todos empujan su trabajo para integrar y compartir el trabajo de todos para esta característica en particular.
fuente
Las ramas están hechas de madera y crecen desde el tronco del árbol. Las etiquetas están hechas de papel (derivado de la madera) y cuelgan como adornos navideños de varios lugares del árbol.
Su proyecto es el árbol, y su característica que se agregará al proyecto crecerá en una rama. La respuesta es rama.
fuente
Parece que la mejor manera de explicar es que las etiquetas actúan como ramas de solo lectura. Puede usar una rama como etiqueta, pero puede actualizarla inadvertidamente con nuevas confirmaciones. Las etiquetas están garantizadas para apuntar a la misma confirmación siempre que existan.
fuente
git tag -f
.Las etiquetas pueden ser firmadas o sin firmar ; Las ramas nunca se firman.
Las etiquetas firmadas nunca pueden moverse porque están vinculadas criptográficamente (con una firma) a una confirmación particular. Las etiquetas sin firmar no están vinculadas y es posible moverlas (pero mover etiquetas no es un caso de uso normal).
Las sucursales no solo pueden moverse a una confirmación diferente, sino que se espera que lo hagan. Debe usar una rama para su proyecto de desarrollo local. No tiene sentido comprometer el trabajo en un repositorio Git "en una etiqueta".
fuente
Me gusta pensar en las ramas como a dónde vas , las etiquetas como dónde has estado .
Una etiqueta se siente como un marcador de un punto importante en particular en el pasado, como el lanzamiento de una versión.
Mientras que una rama es un camino particular, el proyecto se está yendo hacia abajo y, por lo tanto, el marcador de rama avanza con usted. Cuando termine, combine / elimine la rama (es decir, el marcador). Por supuesto, en ese punto, podría elegir etiquetar esa confirmación.
fuente
La parábola de Git explica cómo se crea un DVCS típico y por qué sus creadores hicieron lo que hicieron. Además, es posible que desee echar un vistazo a Git for Computer Scientist ; explica qué hace cada tipo de objeto en Git, incluidas las ramas y las etiquetas.
fuente
Una etiqueta se usa para marcar una versión, más específicamente hace referencia a un punto en el tiempo en una rama. Una rama generalmente se usa para agregar características a un proyecto.
fuente
simple:
Manual de usuario de Git
fuente
la respuesta simple es:
pero
fuente