tortoise tag subversion hacer entre diferencia create branches svn merge branch

subversion - svn branches tags trunk



Reintegración de la sucursal de Subversion (10)

Cuando una rama se reintegra al tronco, ¿esa rama está efectivamente muerta?

¿Puede hacer modificaciones en la rama después de la reintegración y fusionarlas nuevamente en el tronco en una fecha posterior?


Algunos consejos sobre cómo fusionar los cambios si alguien realiza cambios en la sucursal varias veces (pre 1.5): ¡ Recuerde en qué revisión realizó la fusión ! O escriba los números de revisión en alguna parte, o (lo que es más fácil) haga una etiqueta . (Por supuesto, puede descubrirlo más tarde, pero eso es un PITA).

Ejemplo:

Usted tiene un diseño de repositorio como este:

/your_project /trunk /branches /tags

Digamos que es una aplicación web, y ha planeado hacer una versión. Deberías crear una etiqueta, y desde esa (o desde el tronco) una rama en la que realizas las correcciones de errores:

/your_project /trunk /branches /1.0.0-bugfixes /tags /1.0.0

Al hacerlo de esta manera, puede integrar las nuevas funciones en el maletero. Todas las correcciones de errores ocurrirían solo dentro de la rama de corrección de errores y antes de cada lanzamiento se crea una etiqueta de la versión actual (ahora desde la rama de corrección de errores).

Supongamos que hizo una gran cantidad de correcciones de errores y las lanzó al servidor de producción y necesita una de esas características desesperadamente en el troncal actual:

/your_project /trunk /branches /1.0.0-bugfixes /tags /1.0.0 /1.0.1 /1.0.2

Ahora puede integrar los cambios entre 1.0.0 y 1.0.2 en su troncal (suponiendo que se encuentre en su copia de trabajo):

svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .

Esto es lo que debes recordar. Ya fusionó los cambios entre 1.0.0 y 1.0.2 en el tronco. Supongamos que hay más cambios en la versión de producción actual:

/your_project /trunk /branches /1.0.0-bugfixes /tags /1.0.0 /1.0.1 /1.0.2 /1.0.3 /1.0.4

Ahora está listo para lanzar la nueva versión desde trunk, pero los últimos cambios de sus correcciones de errores aún faltan:

svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .

Ahora tiene todos los cambios fusionados en su troncal, y puede hacer su lanzamiento (no olvide probarlo primero).

/your_project /trunk /branches /1.0.0-bugfixes /1.1.0-bugfixes /tags /1.0.0 /1.0.1 /1.0.2 /1.0.3 /1.0.4 /1.1.0


Como todos ya lo han dicho aquí: la sucursal no está muerta y se compromete con la sucursal puede continuar bien.

A veces, aunque quieras matar a la rama después de la fusión. La única solución confiable es eliminar la rama. La desventaja es que luego es más difícil encontrar la sucursal de nuevo si quieres echarle un vistazo, por ejemplo, por razones históricas. Por lo tanto, muchas personas abandonan las ramas "importantes" y tienen un acuerdo de no cambiarlas. Ojalá hubiese una forma de marcar una rama como muerta / solo de manera que se asegure que nadie pueda comprometerse con ella hasta nuevo aviso.


Cuando haces una fusión, especificas el objetivo. Puede combinar las diferencias de TreeA y TreeB con TreeC si lo desea. Como lo sugiere Chris, tu pregunta realmente no tiene mucho sentido. Si fusiona su rama en el tronco, la rama permanece intacta. Si la rama no es necesaria después, puede eliminarla.


Después de reintegrarte desde una rama al tronco, debes hacer una de estas dos cosas:

  • Eliminar su rama Este es el más fácil, pero hace que sea más difícil ver la historia de la sucursal.

  • Dile a tu sucursal que no fusione el compromiso de reintegración . Si se reintegra al tronco y lo svn merge --record-only -c X url-to-trunk como revisión X, puede ejecutar este comando en su rama: svn merge --record-only -c X url-to-trunk . Sin embargo, no debe hacer esto si realizó cambios como parte de la confirmación, a excepción de la combinación misma. Cualquier otro cambio nunca regresará a su sucursal.


En primer lugar, debe actualizar su cliente y servidor de Subversion si todavía usa Subversion 1.7 o una versión anterior. No hay ninguna razón para usar versiones muy antiguas de Subversion. A partir de 2016, la versión actual es Subversion 1.9. SVN 1.8 también es compatible ahora y aún recibe correcciones de errores.

El problema que preguntas fue resuelto en Subversion 1.8. A partir de SVN 1.8, la opción de --reintegrate ha quedado obsoleta . Las fusiones de reintegración ahora se realizan automáticamente . Consulte la entrada Notas de la versión de Subversion 1.8 relacionada con la mejora .

Lea SVNBook 1.8 | Reintegrando una rama :

Si elige no eliminar su rama después de reintegrarla al tronco, puede continuar realizando fusiones de sincronización desde el tronco y luego volver a integrar la rama. Si hace esto, solo los cambios realizados en su rama después de la primera reintegración se fusionan en el tronco.

...

Solo Subversion 1.8 admite esta reutilización de una rama de características. Las versiones anteriores requieren un manejo especial antes de que una rama de características se pueda reintegrar más de una vez. Consulte la versión anterior de este capítulo para obtener más información: http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate


No, la rama todavía está viva, pero, en ese momento, es exactamente lo mismo que el tronco. Si continúa desarrollando en la sucursal, puede volver a fusionarse con el tronco más adelante.


Puede fusionar de una rama a una troncal, o de una troncal a una rama, tantas veces como desee.


Puede seguir desarrollando en la sucursal, la función que necesitará es merge-tracking que se encuentra en Subversion 1.5, esto significa que las fusiones adicionales de la sucursal solo incluyen nuevos cambios.


Puedes hacerlo técnicamente, tu rama no está muerta ni deshabilitada, pero no se recomienda fusionar de rama a tronco después de la reintegración.

Puede encontrar una discusión completa sobre el motivo de esto, aquí: reintegrar la fusión Subversion

Básicamente, dice que es posible fusionar los cambios nuevamente en el tronco, pero dado que la reintegración te obliga a fusionarte de tronco a tronco antes de la operación de reintegración, te enfrentarás a la fusión reflexiva / cíclica, que es muy problemática en Subversion 1.5 .
Según el artículo, se recomienda eliminar la rama reintegrada inmediatamente después de la reintegración y crear una nueva con el mismo nombre (o diferente).

Este es un comportamiento de Subversion conocido que se abordará en la versión futura (probablemente en 1.6)


En realidad, necesitas hacer una --record-only del tronco en tu rama de la revisión que fue creada por la confirmación de --reintegrate :

$ cd trunk $ svn merge --reintegrate ^my-branch $ svn commit Committed revision 555. # This revision is ^^^^ important

Y ahora lo grabas

$ cd my-branch $ svn merge --record-only -c 555 ^trunk $ svn commit

Estás contento de mantener la sucursal ahora

Más información está en el Capítulo 4. Ramificación y Fusión, Fusión avanzada .