Estoy teniendo algunas dificultades para la comprensión de cómo utilizar la etiquetas frente a ramas en .

Me cambié de la versión actual de nuestro código de , y ahora voy a estar trabajando en un subconjunto de ese código para una función en particular. Un par de otros desarrolladores van a estar trabajando en esto también, pero no todos los desarrolladores en nuestro grupo se va a preocupar de esta característica. Debo ser la creación de una sucursal o una etiqueta? En qué situaciones debo usar uno contra el otro?

  • Desde la web de búsqueda de cómo usar git tag me trajo a ese enlace en primer lugar, debo agregar que hay una mejor (en mi humilde opinión) respuesta acerca de una etiqueta aquí: stackoverflow.com/questions/35979642/…
InformationsquelleAutor Bialecki | 2009-09-21

11 Comentarios

  1. 489

    Un etiqueta representa una versión de una rama particular en un momento en el tiempo. Un rama representa un subproceso independiente de desarrollo que se puede ejecutar simultáneamente con otros esfuerzos en el desarrollo de la misma base de código. Los cambios de una rama, finalmente, puede ser incluido de nuevo en otra rama para unificarlos.

    Por lo general vas a etiqueta una versión particular de modo que usted puede volver a ella, por ejemplo, esta es la versión que se entregan a XYZ Corp. Un rama es más que una estrategia para brindar actualizaciones sobre una particular versión de el código mientras continúa para hacer el desarrollo en ella. Usted va a hacer una rama de la entrega de la versión, continuar con el desarrollo en la línea principal, pero hacer correcciones a la rama que representa la entrega de la versión. Finalmente, tendrás la combinación de estas correcciones de errores de nuevo en la línea principal. A menudo vamos a usar tanto de ramificación y etiquetado juntos. Tendrás varias etiquetas que se pueden aplicar tanto a la línea principal y sus ramas marca en particular versiones (aquellos que se entrega a los clientes, por ejemplo) a lo largo de cada rama que desea recrear — para la entrega, error de diagnóstico, etc.

    En realidad es más complicado que esto, o tan complicado como usted quiere hacer, pero estos ejemplos debe darle una idea de las diferencias.

    • en su caso él quiere utilizar las ramas, tal vez también debe tener en cuenta esto en su respuesta 😉
    • AFAIK, las etiquetas no son únicos por rama. Así que yo no puede dar el mismo nombre para diferentes compromete en ramas separadas.
    • Ciertamente no es una mala cosa, en mi humilde opinión. Especialmente en la forma descrita por tvanfosson, tener más de una etiqueta con el mismo nombre en diferentes ramas pueden llegar a ser difícil de mantener. Dado el ejemplo, yo pienso que si tú puede tienen etiquetas con el mismo nombre en diferentes ramas, que rápidamente se estableció como una mala práctica. Es bueno saber que usted no puede, sin embargo. Gracias M. Y.!
    • Una etiqueta es un alias para una confirmación de hash. Misma que se puede obtener una comprometerse con git checkout 88c9f229f, puedes hacer algo como git checkout your_tag y usted va a obtener el commit que fue suavizado por la etiqueta.
    • no son ramas alias demasiado? La única diferencia es que una rama-alias automáticamente repoints sí mismo en la más reciente confirmación en la cadena.
  2. 504

    De la teórico punto de vista:

    • etiquetas son nombres simbólicos para un determinado revisión. Que siempre apuntan al mismo objeto (por lo general: a la misma revisión); no cambian.
    • ramas son nombres simbólicos para línea de desarrollo. Nuevo cometa se crean en la parte superior de la rama. La rama puntero, naturalmente, avances, apuntando a nuevos y más nuevos commits.

    De la técnica punto de vista:

    • etiquetas residen en refs/tags/ espacio de nombres, y puede apuntar a etiqueta de objetos (anotado y, opcionalmente, firmado con GPG etiquetas) o directamente a cometer objeto (menos utilizado ligero de etiquetas para nombres locales), o en casos muy raros, incluso a objeto de árbol de o objeto blob (por ejemplo, firma GPG).
    • ramas residen en refs/heads/ espacio de nombres, y puede apuntar sólo a cometer objetos. El HEAD puntero debe referirse a una rama (referencia simbólica) o directamente a un commit (desprendimiento de la CABEZA o sin nombre de la rama).
    • remoto de seguimiento de las ramas residen en refs/remotes/<remote>/ espacio de nombres, y siga ordinario ramas en el repositorio remoto <remote>.

    Ver también gitglossary manual:

    rama

    Una «rama» es una línea activa de desarrollo. El más reciente de comprometerse en una rama se conoce como la punta de la rama. La punta de la rama se hace referencia a una rama de la cabeza, que se mueve hacia adelante como un desarrollo adicional se realiza en la rama. Un único repositorio git puede realizar el seguimiento de un número arbitrario de las ramas, pero su árbol de trabajo está asociado con solo uno de ellos (el «actual» o «chequeo» de la rama), y la CABEZA de los puntos a esa rama.

    etiqueta

    Un ref que apunta a una etiqueta o un objeto de commit. En contraste con una cabeza, una etiqueta no es cambiado por un commit. Etiquetas (no etiquetar los objetos) se almacenan en $GIT_DIR/refs/tags/. […]. Una etiqueta que se usa normalmente para marcar un punto en particular en la confirmación de ascendencia de la cadena.

    etiqueta de objeto

    Un objeto que contiene un ref que apunta a otro objeto, que puede contener un mensaje sólo como un objeto de commit. También puede contener una (PGP) de la firma, en cuyo caso se denomina un «firmado etiqueta de objeto».

    • Pregunta: si el tratamiento de una sucursal como una etiqueta (es decir, usted cree, nunca actualización), ¿hay alguna diferencia real?
    • absolutamente. No contiene diferentes informaciones (puede firmar una etiqueta, puede agregar una descripción a una rama). Puede mover una rama (por lo que incluso si usted nunca actualización, todavía se puede reajuste de la misma.). No se puede mover una etiqueta (que está vinculada a un determinado commit). Usted puede elegir para empujar una rama. Las etiquetas no son empujados por defecto. Nunca se debe usar uno para el otro (a menos que usted está realmente en un SVN mentalidad, en cuyo caso es necesario «desaprender» que rápido si quieres ir con git).
    • Hay una diferencia en cómo Git trata ramas vs cómo tratar las etiquetas. Además de lo VonC dijo, no se puede avanzar etiqueta por error: «git checkout <tag>» generaría anónimo anónimo rama (llamados ‘desprendimiento de la CABEZA») y seleccione estado de la etiqueta. La creación de un nuevo commit hace a este monstruo de la rama, y no cambiar lo de la etiqueta de puntos.
    • De la OMI, las ramas están separados líneas de tiempo (un mundo paralelo), y las etiquetas son momentos específicos en una línea de tiempo.
    • Aquí nadie ha mencionado todavía, pero puedes usar una etiqueta como el punto de inicio de una rama: git checkout -b <branch name> <tag name>
    • Usted puede utilizar alguna commit (revisión), como punto de partida para una rama; el uso de la etiqueta es simplemente un caso especial de esta situación.
    • me parece que tu comentario más útil/concisa de su primera respuesta, es decir, las ramas se mueven cuando pasa, cuando las etiquetas no se.
    • Es GPG en lugar de la firma PGP?

  3. 137

    Si usted piensa en su repositorio como un libro que narra el progreso en su proyecto…

    Ramas

    Usted puede pensar en una rama como uno de esos pegajosos marcadores:

    Cómo es una etiqueta diferente a partir de ramas en Git? Que debo usar, aquí?

    Un nuevo repositorio tiene sólo una de ellas (llamada master), que se mueve automáticamente a la última página (creo cometer) que has escrito. Sin embargo, usted es libre de crear y utilizar varios marcadores para marcar otros puntos de interés en el libro, así que usted puede volver a ellos rápidamente.

    También, siempre se puede pasar un determinado marcador a otra página del libro (utilizando git-reset, por ejemplo); puntos de interés suelen variar a lo largo del tiempo.

    Etiquetas

    Usted puede pensar en etiquetas como títulos de capítulo.

    Cómo es una etiqueta diferente a partir de ramas en Git? Que debo usar, aquí?

    Puede contener un título (creo anotado etiquetas) o no. Una etiqueta es similar pero diferente a la sucursal, en la que se marca un punto de histórico interés en el libro. Para mantener su aspecto histórico, una vez que ha compartido una etiqueta (es decir, la empujó a un remoto compartido), no se supone que moverlo a otro lugar en el libro.

    • Me gustaría imagen que una rama sería un libro, y los marcadores de etiquetas. Usted puede continuar escribiendo un libro, pero no se puede editar. Etiqueta es un fijo momento en el libro.
    • En mi metáfora, la confirmación DAG es el libro. Desde una rama de Git no es nada más que un «puntero» a un commit, creo que el marcador analogía es adecuada, aquí.
    • Me gustó la rama explicación como una línea de desarrollo. Un libro, sería una rama. Usted puede comenzar un nuevo libro basado en el lugar donde a la izquierda de la rama principal. Usted puede escribir paralelo y, a continuación, intenta combinar en un libro/rama.
    • Entiendo que la forma en que te gusta pensar de una rama, pero me parece que, en Git, que en realidad es engañosa. Consulte stackoverflow.com/questions/25068543/…
    • este es realmente un ahorro de tiempo de respuesta
    • Si usted comienza a escribir un libro y tener 50 primeras páginas, se puede copiar (crear una nueva rama de la misma) y seguir escribiendo dos libros simultáneamente (o dar la copia de libro a algún otro escritor – desarrollador) y, finalmente, usted puede combinar los cambios desde el otro libro de su libro.
    • Esta respuesta es transmitir una idea muy equivocada. Las ramas no son parte de una historia lineal como un libro. Y sus marcadores son más etiquetas similares, apuntando a los puntos específicos de la historia.
    • Reconozco que el aspecto lineal de un libro que hace que mi analogía un tanto engañosa. Sin embargo, es útil y me quedo con él. Ramas puede se mueve (de ahí marcadores), mientras que las etiquetas no pueden/no (de ahí el título del capítulo). Una idea que me he encontrado muchas veces y es erróneo es pensar en una rama como una línea de desarrollo o una serie de confirmaciones.
    • Una «línea de desarrollo» o «serie de confirmaciones» es exactamente lo que una rama está.
    • No estoy de acuerdo; no es tan simple como que.
    • Me gusta Chris respuesta en su vinculados pregunta: «el cometa que se puede llegar desde la confirmación señalado por la rama». Siguiendo el padre del padre de una de las ramas de la CABEZA de forma recursiva que, finalmente, acabar con una serie de confirmaciones que representan una línea de desarrollo. Mi problema con la analogía del libro es que usted no puede simplemente añadir nuevo texto al final de un capítulo o en cualquiera de los marcadores, y usted no puede copiar todo un capítulo para probar algunos de los diferentes terminaciones. También todos los capítulos son lineales, realizar una secuencia, mientras que las ramas son parte de un gráfico acíclico dirigido.
    • Me gusta Chris de la respuesta, pero «el cometa que se puede llegar desde la confirmación señalado por la rama de» formar un DAG, no una línea de, en el caso general. Por otra parte, no hay uno-a-uno el mapeo entre 1) los commits que se puede llegar desde la confirmación señalado por una rama y 2) aquellas ramas. Un ejemplo sencillo de esto es un repositorio que contiene un único commit, con dos ramas—master y develop, decir—que apunta a que se comprometan. Usted no puede, sin ambigüedades, se refieren, en el habla, para que cometemos como master o develop.
    • Una rama es más de lo que puede llegar; tiene un nombre, un reflog, etc.
    • De acuerdo con la Etiqueta de explicación, pero no con Rama (como su nuevo Tag).. Rama es en realidad un mundo paralelo/línea de tiempo que puede combinar en algún momento más adelante..
    • Cualquiera que sea la metáfora que funciona para usted, pero tenga en cuenta que el pensamiento de una rama como una línea de desarrollo o una secuencia de cometa es engañosa. Consulte stackoverflow.com/questions/25068543/…
    • de acuerdo, ese es mi punto demasiado.. !! Redacción/atravesar un libro es similar a la secuencia de cometa..

  4. 42

    Lo que usted necesita para darse cuenta de que, viniendo de CVS, es que ya no cree directorios al establecimiento de una sucursal.

    No más «pegajosa etiqueta» (que puede ser aplicado a un solo archivo), o «rama de la etiqueta».

    Rama y las etiquetas son dos objetos diferentes en Git, y que siempre se aplican a la todos repo.

    No (con SVN este momento) explícitamente la estructura de su repositorio con:

    branches
       myFirstBranch
         myProject
           mySubDirs
       mySecondBranch
         ...
    tags
       myFirstTag
         myProject
           mySubDirs
       mySecondTag
       ...
    

    Que la estructura viene del hecho de CVS es un sistema de revisión y no una versión del sistema (ver Fuente de control frente a la Revisión de Control?).

    Eso significa que las ramas son emulados a través de etiquetas para CVS, directorio de copias de SVN.

    Su pregunta hace sentidos si se utilizan para obtener una etiqueta, y empezar a trabajar en ella.

    Lo que no debe 😉

    Una etiqueta se supone que representa un inmutable de contenido, utilizado sólo para acceder a ella con la garantía de tener el mismo contenido en todo momento.

    En Git, la historia de las revisiones es una serie de confirmaciones, formando un gráfico.

    Una sucursal es una ruta de acceso de la gráfica

    x--x--x--x--x # one branch
        \ 
         --y----y # another branch
           1.1
            ^
            |
            # a tag pointing to a commit
    
    • Si usted compra un tag, usted tendrá que crear una rama para empezar a trabajar a partir de ella.
    • Si usted compra un rama, usted va a ver directamente el último commit(‘HEAD’) de esa rama.

    Ver Jakub Narębski la respuesta para todos los tecnicismos, pero, francamente, en este punto, no es necesario (pero) todos los detalles 😉

    El punto principal es: una etiqueta de ser un simple puntero a una confirmación, usted nunca será capaz de modificar su contenido. Usted necesita una rama.


    En su caso, cada desarrollador que trabaja en una característica específica:

    • debe crear su propia rama en sus respectivos repositorio
    • seguimiento de las ramas de su colega de los repositorios (los que trabajan en la misma función)
    • tracción/empuje con el fin de compartir su trabajo con sus compañeros.

    Lugar de hacer el seguimiento directamente de las ramas de sus colegas, usted puede realizar un seguimiento de sólo la rama de uno «oficial» repositorio central para que todo el mundo empuja su trabajo con el fin de integrar y compartir todo el trabajo de esta característica particular.

    • gracias por aclarar la forma en que las ramas y etiquetas de trabajos 🙂 yo no sería capaz de entender plenamente sin su ejemplo.
    • Creo que te refieres «SVN» en su respuesta y no «CVS». CVS no tienen la estructura de directorio; SVN hace. De hecho, el etiquetado en git me recuerda mucho más de etiquetado en RCS/CVS que el etiquetado en el SVN (donde tag == degenerados de la rama).
    • buen punto. He tratado de separar un poco más de CVS y SVN puntos en el (editado) respuesta.
  5. 37

    Ramas son de madera y crecer desde el tronco del árbol. Las etiquetas están hechas de papel (de derivados de la madera) y colgar como Adornos de Navidad de varios lugares en el árbol.

    Su proyecto es el árbol, y su característica que va a ser añadido para el proyecto va a crecer en una rama. La respuesta es de la rama.

    • el amor por la analogía
  6. 15

    Parece que la mejor manera de explicar es que las etiquetas actúan como leer sólo las ramas. Puede utilizar una rama como una etiqueta, pero sin darse cuenta puede actualizar con los nuevos commits. Etiquetas están garantizados a punto para el mismo cometido, como siempre que existe.

    • Etiquetas están garantizados a punto de cometer el mismo tiempo que existen. No es totalmente cierto. En realidad se puede mover una etiqueta con git tag -f.
  7. 13

    Etiquetas pueden ser firmado o sin firmar; las ramas están nunca se firmó.

    Firmado etiquetas nunca puede mover porque son criptográficamente obligado (con firma) a un particular cometer. Unsigned etiquetas no están enlazados y es posible moverlos (pero mover las etiquetas no es normal caso de uso).

    Ramas no sólo puede mover a otro a cometer, pero son espera para hacerlo. Usted debe utilizar una rama local de su proyecto de desarrollo. No acaba de tener sentido para cometer el trabajo a un repositorio Git «en una etiqueta».

  8. 9

    Me gusta pensar en ramas como donde vas, etiquetas como dónde has estado.

    Una etiqueta se siente como un marcador de un determinado punto importante en el pasado, como una versión de liberación.

    Mientras que una rama es un camino particular, el proyecto va a la baja, y por lo tanto la rama marcador de avances con ustedes. Cuando haya terminado usted de mezcla/eliminar de la rama (es decir, el marcador). Por supuesto, en ese momento puedes elegir la etiqueta que cometen.

  9. 6

    Una etiqueta que se utiliza para marcar una versión, más específicamente se hace referencia a un punto en el tiempo en una rama. Una rama se utiliza normalmente para agregar características a un proyecto.

Dejar respuesta

Please enter your comment!
Please enter your name here