2009-09-11 7 views
6

Soy novato en Git.Mantain lanzamientos antiguos sin crear ramas de larga vida

he leído: "Pro Git: El mantenimiento de un proyecto" (libro) y Git: Documentación/howto/mantener git.txt-

Difícil pregunta para mí: cómo MANTENER los viejos comunicados sin creando ramas separadas de larga vida. En otras palabras, estoy interesado en cómo trabajar con una rama "maint" en el proyecto Git.

En el ejemplo (no se muestra la fusión con ramas temáticas y la integración de contribuidores de parches, otras ramas de "siguiente", "pu" tampoco se muestran aquí).

Estas imágenes se pueden ver también at here.

  +--master 
      | 
      +--maint 
      | 
    (c1)->(c2) 
      | 
      +--tag : feature-release v1.0 

La próxima vez:

tag:feature-rel v1.0--+     +--master 
         |     | 
       (c1)->(c2)->(c)->(c)->(c)->(c) 
         | 
         +->(c)->(c)->(c) 
            | 
            +--maint 
            | 
            +--tag:maint-rel v1.0.1 

A continuación, como se describe en "mantener-git.txt", ejecute:

$ git checkout master 
$ git merge maint 

Resultado:

tag:feature-rel v1.0--+       +--master 
         |       | 
       (c1)->(c2)->(c)->(c)->(c)->(c)->(c100) 
         |      /
         +->(c)->(c)->(c50)-----' 
            | 
            +--maint 
            | 
            +--tag:maint-rel v1.0.1 

La próxima vez :

       +--master 
           | 
           +--tag:feature-rel v2.0 
           | 
    ...->(c)->(c100)->(c101)->(c102) 
      /
...->(c50)---' 
     | 
     +--maint 
     | 
     +--tag:maint-rel v1.0.1 

Y en este punto tengo algunas preguntas:

  1. ¿Qué hacer con el "maint" rama? ¿Entiendo que el puntero "maint" debe moverse en la misma posición que el "maestro"? Cómo ?
  2. Después, ¿cómo hacer una bifurcación de una rama "maint" desde la rama "master"?
  3. Si aparece un parche (transcurre mucho tiempo, por ejemplo, la versión actual de la versión v10.0) para la antigua "etiqueta: maint-rel v1.0.1", cómo integrarlo en la "maint" y en "maestro"?

Gracias.

Respuesta

3

cómo MANTENER los viejos comunicados sin crear un separadas ramas de larga vida

ramas de mantenimiento se realizan con frecuencia por la liberación y de larga duración, ya que sirven para fijar error específico a la liberación, y no todo debe fusionarse nuevamente con el desarrollo actual.

1/¿Qué hacer con la rama "maint"? ¿Entiendo que el puntero "maint" debe moverse en la misma posición que el "maestro"? Cómo ?

No estoy seguro de por qué reutilizaría aquí. una rebase no funcionaría.
puede ser un

$ git checkout maint 
$ git reset --merge c102 

Desde 'maint' ya se fusionó con maestría, supongo que este restablecimiento no sería actualizar cualquiera de los archivos más recientes en el maestro.

Acabo de probar que:

alt text http://img188.imageshack.us/img188/4425/resetmerge.png

Lo hace mover la cabeza de 'maint', sin tocar ningún archivo en master.

2/A continuación, ¿cómo hacer una bifurcación de una rama 'maint' desde la rama 'master'?

bien el restablecimiento tendría que mover la cabeza de 'maint' para el desarrollo actual: si C102 es la v2, todo lo que necesita es a la comprobación 'maint', y que habría tenedor de inmediato.

que le dará:

alt text http://img36.imageshack.us/img36/91/resetmerge2.png

3/si aparece un parche (transcurrir un tiempo muy largo, por ejemplo, la corriente v10.0-Feature Release) para la etiqueta de edad" : maint-rel v1.0.1 ", ¿cómo integrarlo en" maint "y en" master "?

No es necesario crear una "rama de mantenimiento denominado":

$ git checkout -b maint-1.0 c50 
$ # work on patch 
$ git checkout maint 
$ git cherry-pick ... # only merge what you need in maint 
$ git checkout master 
$ git cherry-pick ... # only merge what you need in maint 

Nota: es posible que desee no fusionar la misma cosa en maint (que puede todavía necesita alguna parte de la solución hecho en maint -1.0) y maestro (que puede haber evolucionado tanto que la mayoría del parche ya no es relevante)

Cuestiones relacionadas