2008-11-06 8 views
6

Estamos utilizando ramas de características en Subversion para nuestro desarrollo, que es una forma muy conveniente de mantener el código dentro del control de versión que aún no está listo para la línea principal. Sin embargo, cada vez que voy a fusionar la revisión de la rama de características en la línea principal, me duele. Ahora voy a través de los siguientes pasos:¿Cuál es la mejor manera de fusionar una rama de función en la línea principal en Subversion?

  1. Mira la revisión original, rama de la característica a un nuevo directorio
  2. Realizar una diferencia entre mi desarrollo actual y los directorios originales rama de la característica con una herramienta como Beyond Compare
  3. Verifique la revisión de la línea principal actual a un nuevo directorio
  4. Combine los archivos nuevos/modificados en el directorio principal actual.
  5. Realizar una diferencia usando mi IDE para asegurar que todos los archivos se comprueban adecuadamente/añadido a la subversión
  6. compilar y probar
  7. Commit

Me parece que hay un montón de espacio por errores en este proceso y me pone nervioso cada vez que camino por los escalones. De acuerdo, todo está registrado en Subversion en mi rama de características, por lo que un error en cualquier paso es recuperable.

Creo que Subversion 1.5 tiene una forma de fusionar una rama en la línea principal, pero todavía estamos utilizando Subversion 1.4. ¿Qué utilizan otras personas para simplificar los pasos de combinar una rama de características en Subversion en su desarrollo principal? ¿Estás usando diferentes herramientas? ¿Estás utilizando la función de fusión en Subversion 1.5?

+0

Sigo los mismos pasos, pero uso DiffMerge de SourceGear como mi herramienta de comparación. Es un PITA, una cosa que creo que TFS hizo muy bien y extraño. – cfeduke

+0

Antes de actualizar a 1.5 (un lujo que tenía), hice exactamente los mismos pasos con la misma herramienta (Beyond Compare 3, que es genial). Fue laborioso ya veces tedioso, pero nunca tuve problemas. Con SVN 1.5 (ver a continuación), la vida es mucho más fácil ... – Dan

Respuesta

6

Estoy usando la nueva función --reintegrate de Subversion 1.5 por el momento y creo que es increíble. Es mucho más fácil y mucho menos propenso a errores que la forma manual. La desventaja es, sin embargo, que las nuevas características de fusión requieren que tanto el repositorio como el cliente estén en 1.5 y los cambios en el repositorio 1.5 impidan su uso por parte de cualquier cliente que no sea 1.5 ... así que para obtener la función de fusión, es básicamente una escenario de todo o nada.

En cuanto a sus preguntas originales, solo necesita mantener un seguimiento muy riguroso de las principales modificaciones de la rama que ha fusionado en su rama de trabajo durante el desarrollo. Sin embargo, incluso con la característica de integración de 1.5, es importante asegurarse de que la copia de trabajo reintegrada de la rama principal se vea correcta y se compile antes de comprometerse. Básicamente, hace la vida mucho más fácil (especialmente para ramas de características de larga vida) porque no tiene que llevar registros rigurosos de lo que ha cambiado y cuando ha integrado los cambios desde otras ramas a su rama de características.

La documentación de las notas de la versión en subversion.tigris.org está muy bien escrita y le recomendaría que lo revise brevemente para ver todos los cambios entre 1.4 y 1.5 y para una buena descripción de las nuevas instalaciones de fusión.

+0

Buena explicación. Recientemente me actualicé a 1.5 y considero que es una mejora MAYOR sobre 1.4. Su descripción anterior está en punto. – Dan

+0

Realmente vale la pena ir a 1.5, las capacidades que fusionan el seguimiento hacen que valga la pena el esfuerzo. –

+0

Ahora también podrías ir a 1.6, por supuesto :) –

3

Los pasos 1, 2, 4 y 5 están integrados en subversión, lo hace el comando 'svn merge'. En su copia de trabajo de la línea principal escriba 'svn merge -r startrev: lastref svn: // repository/branchurl'. Startref y lastref se denominarán la ventana de revisión, que debe fusionarse en la línea principal. 'svn: // repository/branchurl' debe ser la URL de su rama.

Subversion 1.5 ofrece un mejor soporte para esta función. Ya no es necesario que especifique las revisiones que desea fusionar, ya que ahora subversión mantiene la información sobre las fusiones y simplemente fusiona todas las revisiones que aún no se han fusionado.

Lea más sobre esto en el Subversion-book.

2

Si es la rama que desea combinar de nuevo a la rama de la línea principal (es decir, que no es un integrador que hace eso para otros desarrolladores), esto es lo que hay que hacer:

  • Anote la revisión en el que fusionó por última vez la línea principal en su rama (para mantenerla sincronizada). Digamos que es "LASTSYNC"
  • la salida de la rama de la línea principal en un nuevo directorio (como MergeFeatureBranchToTrunk), edifican
  • en esa rama, utilice svn merge "LASTSYNC":HEAD svn://path/to/FeatureBranch .
  • resolver conflictos (si los hay)
  • compilar
  • prueba
  • ver sus cambios con una herramienta de diferencias para asegurarse de que todo se ve bien
  • cometer de nuevo a la línea principal
0

Eche un vistazo a svnmerge; mantiene un registro del "¿qué he fusionado? ¿Qué he elegido para no fusionarme?" parte del trabajo para usted, y se basa en el comando "fusionar" de svn para hacer el trabajo pesado.

Cuestiones relacionadas