Usando TortoiseSVN, ¿cómo combino los cambios del tronco a una rama y viceversa?

132

He estado leyendo sobre la ramificación / fusión con Subversion 1.5 usando el excelente y gratuito Version Control con el libro de Subversion . Creo que entiendo cómo usar el cliente de línea de comandos de Subversion para realizar las acciones que necesito con más frecuencia, que son:

Actualizar rama con cambios desde el tronco

Desde el directorio de trabajo de la sucursal, ejecute:

svn merge http://svn.myurl.com/proj/trunk

Fusionar rama en tronco

Desde el directorio de trabajo del tronco, ejecute:

svn merge --reintegrate http://svn.myurl.com/proj/branches/mybranch

Sin embargo, estamos utilizando TortoiseSVN 1.5 como nuestra interfaz para Subversion. Me gustaría saber cómo realizar mejor estas operaciones con TortoiseSVN. El nuevo cuadro de diálogo proporciona tres opciones diferentes en el menú principal.

  1. Fusionar una gama de revisiones
  2. Reintegrar una rama
  3. Fusiona dos árboles diferentes

Por lo que puedo deducir, TortoiseSVN siempre ejecuta svn con la siguiente sintaxis.

svn merge [--dry-run] --force From_URL @ revN To_URL @ revM PATH

Además, la reintegración de una rama a menudo falla con un mensaje que indica que algunos objetivos no se han fusionado y que no puede continuar, por lo que tuve que usar la opción # 3.

Mis preguntas son:

  1. ¿Cómo uso TortoiseSVN 1.5 para fusionar los cambios del tronco a una rama?
  2. ¿Cómo uso TortoiseSVN 1.5 para fusionar la rama con el tronco, con y sin el método de reintegración?
  3. ¿Cuál de las opciones anteriores debo usar para cada una y por qué?

EDITAR

A través de las pruebas de "ejecución en seco", he encontrado que la operación de Subversion de línea de comando

svn merge http://svn.myurl.com/proj/trunk

es análogo a la opción n. ° 1 (Combinar un rango de revisiones) en TortoiseSVN, siempre que deje el rango de revisión en blanco.

Ryan Taylor
fuente
¡No se encontraron los enlaces! = /
Leonardo Costa

Respuestas:

28

El comportamiento depende de la versión que tenga su repositorio. Subversion 1.5 permite 4 tipos de fusión:

  1. fusionar sourceURL1 [@N] sourceURL2 [@M] [WCPATH]
  2. fusionar sourceWCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. fusionar [-c M [, N ...] | -r N: M ...] FUENTE [@REV] [WCPATH]
  4. fusionar --reintegrar FUENTE [@REV] [WCPATH]

Subversion antes de 1.5 solo permitía los primeros 2 formatos.

Técnicamente, puede realizar todas las fusiones con los dos primeros métodos, pero los dos últimos permiten el seguimiento de fusión de Subversion 1.5.

Las opciones de TortoiseSVN combinan un rango o revisa mapas al método 3 cuando su repositorio es 1.5+ o al método uno cuando su repositorio es más antiguo.

Al fusionar funciones en una rama de lanzamiento / mantenimiento, debe usar el comando 'Combinar un rango de revisiones'.

Solo cuando desee fusionar todas las características de una rama de nuevo con una rama principal (comúnmente troncal) debe considerar el uso de 'Reintegrar una rama'.

Y el último comando -Fusionar dos árboles diferentes- solo es útil cuando desea salir del comportamiento de ramificación normal. (Por ejemplo, comparar diferentes versiones y luego fusionar la diferencia con otra rama más)

Bert Huijben
fuente
alguien podría ayudarme con stackoverflow.com/questions/51657636/… . Esta es una pregunta importante para nuestro equipo, necesitamos algunas ideas al respecto.
ankur
249

No pude seguir correctamente las otras respuestas, aquí hay más de una guía para tontos ...

Puede hacerlo de cualquier manera para ir trunk -> brancho branch -> trunk. Siempre primero trunk -> branchsoluciono cualquier conflicto allí y luego me fusiono branch -> trunk.

Fusionar tronco en una rama / etiqueta

  1. Pagar la rama / etiqueta
  2. Haga clic derecho en la raíz de la rama | Tortuga SVN | Fusionar ...
  3. Tipo de fusión: fusionar una gama de revisiones | Haga clic en Siguiente' ingrese la descripción de la imagen aquí
  4. Combinar rango de revisión: seleccione la URL del directorio troncal que copió a la rama / etiqueta. Ingrese las revisiones para fusionar o deje el campo vacío para fusionar todas las revisiones | haga clic en Siguiente' ingrese la descripción de la imagen aquí
  5. Opciones de fusión: acabo de dejarlas como predeterminadas | haga clic en 'Fusionar' ingrese la descripción de la imagen aquí
  6. Esto fusionará las revisiones en la rama / etiqueta desprotegida
  7. Luego, confirme los cambios combinados en la rama / etiqueta
icc97
fuente
44
Dejé "Rango de revisión para fusionar" e hice una "Combinación de prueba". Era lo que necesitaba: el rango se estableció automáticamente para mí (desde cuando se realizó la rama hasta la última revisión en la rama)
Lian
Gran respuesta: concisa y fácil de seguir. Funcionó para mí, pero cuando solo quería fusionar un solo archivo de configuración, por alguna razón tuve que hacerlo dos veces. Todo está bien ahora. Saludos
Winger
@Lian Hice lo mismo para fusionar de tronco a rama; deje el rango de revisión en blanco si desea que la última versión de los archivos del tronco se fusione con los archivos derivados.
Extremo
2
La versión actual de Tortoise SVN ahora tiene una opción para fusionar todas las revisiones en lugar de dejar el rango de Revisión en blanco en el paso 4.
The Unknown Dev
1
@Onkar Algunos conflictos casi siempre sucederán. Si usted tiene dos ramas, por ejemplo trunky branch, a continuación, asegurándose de que se fusionan cualquier cambio de trunkque branchtan pronto como sea posible se evitará conflictos tanto como sea posible. Esto significa que cuando combina brancha trunkque no debería haber ningún conflicto.
icc97
12

Debe usar "fusionar un rango de revisión".

Para fusionar los cambios de la troncal a una rama, dentro de la copia de trabajo de la rama, elija "fusionar rango de revisiones" e ingrese la URL de la troncal y las revisiones de inicio y finalización para fusionar.

Lo mismo en la forma opuesta para fusionar una rama en el tronco.

Acerca del indicador --reintegrate, consulte el manual aquí: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate

Davide Gualano
fuente
1

Echa un vistazo a svnmerge.py . Es línea de comandos, TortoiseSVN no puede invocarlo, pero es más poderoso. De las preguntas frecuentes :

La subversión tradicional le permitirá fusionar cambios, pero no "recuerda" lo que ya ha fusionado. Tampoco proporciona una manera conveniente de excluir un conjunto de cambios de la fusión. svnmerge.py automatiza parte del trabajo y lo simplifica. Svnmerge también crea un mensaje de confirmación con los mensajes de registro de todas las cosas que fusionó.

Liudvikas Bukys
fuente
66
svnmerge.py se desarrolló en Subversion 1.4 y versiones anteriores. Subversion 1.5 introdujo el seguimiento de fusión en el producto principal.
Bert Huijben el
0

Shift-Right Haga clic en la carpeta y seleccione TortoiseSVN -> Merge All

Denis
fuente