two tortoise branches svn merge

tortoise - ¿Cómo fusionar la rama de nuevo al tronco en SVN con todo el historial de confirmaciones?



merge two branches svn (5)

¿Cómo fusionar la rama de nuevo al tronco en SVN con todo el historial de confirmaciones? Sé que en Git puedo usar

merge -squash

¿Hay algún comando equivalente en SVN? Estoy usando SVN 1.6.


Con Subversion 1.5 o posterior, la combinación se registra en su copia de trabajo local en la propiedad svn: mergeinfo. Así que esta información no se pierde.

Puede ver las revisiones combinadas si utiliza svn log -g lugar del svn log normal de svn log .

Las fusiones normales se realizan como

svn merge -rREV1:REV2 svn://server/branch my_trunk_wc

Pero si usa una rama, a veces es más conveniente usar una fusión de reintegración. En este caso, primero debe combinar todos los cambios de troncales en la rama utilizando algo como

svn merge svn://server/trunk my_branch_wc

(Esto fusiona todo lo que no está ya fusionado)

Y después de confirmar este cambio en la rama, puede utilizar

svn merge --reintegrate svn://server/branch my_trunk_wc

Para mover todos los cambios sobre como un solo compromiso. (Después de esta operación debes quitar la rama)


Estoy un poco oxidado con la fusión, pero ¿no debería hacer el truco?

svn merge -rREV1:REV2 svn://server/branch my_trunk_wc

Ver:

svn merge --help


Para crear una combinación de una rama y crear una única confirmación para cada confirmación en la rama, puede usar un script, estoy usando lo siguiente:

#/bin/bash BRANCH="http://your branch url" for i in {1127..1138} # list of revisions do REV=$i echo $REV $BRANCH echo merged $REV from $BRANCH > tmps.commit svn log -c $REV $BRANCH >> tmps.commit svn up svn merge -c $REV $BRANCH ./ svn commit -F tmps.commit rm tmps.commit done

Esto comprobará cada revisión que especifique para la rama específica y realizará una confirmación en el directorio actual, preservando así cada cambio individual con el mensaje correspondiente.


Puede guardar cada conjunto de cambios como una diferencia y luego confirmar cada uno encima del tronco. Esto se denomina comúnmente "trasplante" y existen varias herramientas para hacerlo automáticamente.


Suena como si quisieras:

  1. Fusionar posiblemente de varias ramas.
  2. Tener todas las fusiones correctamente registradas como tales.
  3. Comprometerse como una nueva revisión solamente.

Creo que esto es apoyado por la arquitectura SVN subyacente. Pero no sé si hay algún cliente que lo proporcione (aunque svnmucc lo hará para varios comandos cp , mv , rm ). A menos que quiera hacer más investigación de la que tengo (lo que no llevaría mucho), o escribir su propio cliente que pueda hacer que las bibliotecas SVN lo hagan (lo que puede ser difícil pero aún así es factible); entonces creo que tendrás que sacrificar uno de 2. y 3. arriba.

(Si sacrifica 3, podría volcar el repositorio inmediatamente después y piratear el archivo de volcado para usar solo una revisión, pero no creo que valga la pena correr el riesgo de tener un historial de revisiones minuciosamente más simple ...)