2011-06-15 13 views
7

Estoy buscando la mejor y más segura manera de convertir una rama git en una etiqueta git. Al portar a mano un repositorio svn, básicamente copié todas nuestras ramas y teníamos una rama para cada versión menor (1.1, 1.2, 1.3) que honestamente probablemente no era la mejor manera de hacerlo, sino por el bien de velocidad, estaba más cómodo con las ramas que con las etiquetas en ese momento. Ahora tengo las ramas 1.5, 1.6, 1.7, 1.8, sin embargo, dado que solo tenemos una versión del código implementado en un momento dado, probablemente solo necesite que la última versión sea una rama en caso de que las soluciones rápidas tengan que ir a esa versión que está desplegado Así que estoy buscando la mejor forma de convertir una rama de git en una etiqueta de git. Creo que tengo una forma, pero estoy seguro de lo bueno que es.convirtiendo git branch en git tag

Lo que he hecho hasta ahora es que cada rama Quiero convertir a una etiqueta, He comprobado para asegurarse de que no hay confirmaciones en aquellas ramas que no están en la rama principal, así que lo hice:

git log 1.5 ^master 
git log 1.6 ^master 
git log 1.7 ^master 

Todos estos me devuelven nada, lo que creo que significa que todas las confirmaciones en esas ramas existen en el maestro. Hice esto porque asumí que si hubiera commits en aquellas ramas que no estaban en master, las perdería al convertir la rama en una etiqueta ya que una etiqueta es solo un "puntero" para una confirmación y no una línea de desarrollo. Con esa aparente buena, mi suposición es que sólo tendría que hacer:

git tag 1.5v 1.5 
git tag 1.6v 1.6 
git tag 1.7v 1.7 

Entonces sólo tendría que eliminar las ramas a nivel local e impulsar los cambios al repositorio remoto. ¿Es esta la mejor forma de convertir una rama de git en una etiqueta de git?

También me preocupa que alguien haya creado una rama de say 1.7 (que nadie debería) y ellos tomen los cambios que eliminan esa rama, ¿podrían fusionar esos cambios en otra rama (por ejemplo, maestro) o eso rompería la rama que crearon? Este es un caso que no debería ocurrir ya que no se debe crear sucursales de ninguna versión de rama que no sea la última versión, en este caso 1.8, pero las personas no siempre siguen el procedimiento correctamente, así que quiero asegurarme de que haya una manera para arreglar esto si sucede

+0

[Aquí describí un método eficaz para convertir etiquetas de SVN a etiquetas git] (http://stackoverflow.com/a/20807602/815781) – Onlyjob

Respuesta

6

Respuesta corta: no es un problema. Y crear etiquetas de la manera que usted propone está bien, aunque le sugiero que use la opción -m para crear una etiqueta anotada con un comentario (vea man git-tag), ya que creará una etiqueta de "primera clase" que será utilizada por git describe, etc. argumentos adicionales.

Respuesta larga: Las derivaciones remotas no afectarán directamente a las sucursales locales. Si creo una sucursal de una sucursal o una etiqueta de su repositorio público, cuando elimine esa sucursal y yo obtenga su repositorio, veré que su sucursal se ha ido, pero mi sucursal aún está completa en mi repositorio.

Brances son solo nombres simbólicos para la confirmación a en un repositorio git, cuando se confirma que el CABEZAL y la rama en la que se trabaja apunta al nuevo compromiso.Una etiqueta también es un nombre simbólico para una confirmación, pero no es modificable (puede eliminarla, pero no se puede cambiar), por lo que apunta a una ubicación fija en el historial, mientras que una rama apunta al cabezal móvil de una línea en la historia. Dado que las confirmaciones en git tienen cero, uno o más confirmaciones principales (cero para la confirmación inicial, una para una confirmación normal, más de una para una combinación), incluso si la rama o etiqueta original se elimina del control remoto, su informe local todavía tiene una apunta a su rama local y de esto puede encontrar un ancestro común (asumiendo que las ramas están relacionadas en primer lugar), por lo que aún puede fusionarse en cambios realizados a cualquiera de sus ramas en el maestro.

Viniendo de svn a git puede ser un poco confuso al principio. Parece que todavía estás pensando en términos svn, haciendo que todo sea más confuso. Creo que es más fácil si piensas en git como un sistema de archivos avanzado (que es lo que era Linus Torvalds cuando lo escribió), en lugar de una herramienta de control de código fuente. También sugiero que se tome un tiempo para leer (o leer) git for computer scientists, no es tan desalentador como parece; y tener una mejor comprensión de cómo funciona en realidad lo ayudará a pensar la "forma correcta". ;)

3

Según tengo entendido, usted quiere crear etiquetas en lugar de ramas y de ese modo evitar que otras sigan cometiendo en estas ramas.

Desafortunadamente, no se puede evitar que las personas creen sucursales desde donde quieran, especialmente porque Git es un VCS descentralizado. Sin embargo, puede decidir si una confirmación puede enviarse a un depósito central. Así que podrías escribir ganchos que prohibirían commits que tengan commits específicos en sus antepasados.