Fusionar una rama en un tronco

Estoy enfrentando un problema peculiar con SVN merge. Quiero fusionar de una rama de desarrollo a una troncal. Tenemos varias ramas de desarrollo que cortan el tronco al mismo tiempo.

Estoy fusionando una de esas ramas con el tronco con este comando:

svn merge trunk branch_1

Veo cambios que no son parte de esta rama y se fusionan con el tronco. Qué estoy haciendo mal ?

Versión SVN:

Cliente de línea de comandos de Subversion, versión 1.6.16-SlikSvn-tag-1.6.16@1076804-WIN32.

preguntado el 26 de septiembre de 11 a las 23:09

Sé que esto no es una respuesta, pero si tiene varias ramas activas simultáneamente, probablemente será mejor que se mueva a mercurial o git. Ps: no soy un fanático, he estado trabajando con svn durante ~ 7 años ;-) -

¿Qué ventaja aporta? ¿Por qué pasar a git o mercurial es una mejor opción? -

porque git y mercurial tienen mucho mejor soporte de ramas. Ventajas: no hará tales preguntas y tendrá menos dolores de cabeza al crear y mantener ramas (actualmente estoy trabajando en un proyecto con> 1000 ramas, en svn fue un infierno trabajar con ellas) -

Recomiendo mirar en Svnmerge.py y revisando este artículo. -

4 Respuestas

Su svn merge la sintaxis es incorrecta.

Desea obtener una copia de trabajo de trunk y luego usar el svn merge --reintegrate opción:

$ pwd
/home/user/project-trunk

$ svn update  # (make sure the working copy is up to date)
At revision <N>.

$ svn merge --reintegrate ^/project/branches/branch_1
--- Merging differences between repository URLs into '.':
U    foo.c
U    bar.c
 U   .

$ # build, test, verify, ...

$ svn commit -m "Merge branch_1 back into trunk!"
Sending        .
Sending        foo.c
Sending        bar.c
Transmitting file data ..
Committed revision <N+1>.

Consulte las Capítulo del libro SVN sobre la fusión para más información.


Tenga en cuenta que en el momento en que se escribió, esta era la respuesta correcta (y fue aceptada), pero las cosas han avanzado. Vea la respuesta de topek, y http://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate

Respondido 05 ago 14, 12:08

- la opción de reintegración no es obligatoria, la rama (en 1.6) se puede fusionar con cualquier destino cualquier número de veces - Tejón perezoso

¿En serio? ¿Sin correr el riesgo de resurgir los mismos conjuntos de cambios? ¿Puede proporcionar un enlace para corroborar la evidencia de esto, por favor? - Neutrino

--reintegrate de hecho, no es obligatorio, pero es realmente recomendable en este caso. He intentado hacerlo sin --reintegrate y terminó con cientos de conflictos. Con --reintegrate, sin conflictos y todo estuvo bien! - tibo

La --reintegrate La opción es simple y efectiva, PERO debe tenerse en cuenta que "Una vez que --reintegrate la fusión se realiza de una rama a otra, la rama ya no se puede utilizar para el trabajo posterior. No es capaz de absorber correctamente los nuevos cambios de baúl, ni se puede reintegrar correctamente al baúl de nuevo ", como se explica en el libro que ha vinculado. - Pino

@daveL, las fusiones hacia adelante de tronco a rama tienen sentido para mí. Sin embargo, he encontrado una función avanzada para "mantener viva una rama reiterada" (consulte stackoverflow.com/a/10163059/685806), además, se aplica automáticamente en las versiones de cliente más recientes. - Pino

Si su directorio de trabajo apunta al tronco, entonces debería poder fusionar su rama con:

svn merge https://HOST/repository/branches/branch_1

asegúrese de emitir este comando en el directorio raíz de su tronco

Respondido 03 Oct 11, 17:10

A partir de SVN 1.8. Esta es la respuesta correcta. Ver subversion.apache.org/docs/release-notes/… - verdecomojade

@blahdiblah, el fragmento de código tiene mucha información extraña. Existe una razón por la cual el resumen de los estudios se lee en órdenes de magnitud más que cualquier otra parte de un estudio. Lo mismo ocurre con las pruebas de UX, la minimización de las tasas de rebote, etc. Es el mismo principio. - ahnbizcad

con 1.7 puede fusionarse sin la opción --reintegrate, y seguir desarrollando en la rama y seguir fusionando. Lamentablemente, 1.8 obligará a que esto sea una reintegración, y no parece haber una forma de evitarlo. Esto significa que tan pronto como te fusiones, no podrás usar la rama sin pasar por el temido "baile de la vida". John Little

¡No olvide enviar la copia de trabajo del tronco al repositorio después de la fusión! - Juan

Realice una actualización de svn en el tronco, anote el número de revisión.

Desde el maletero:

svn merge -r<revision where branch was cut>:<revision of trunk> svn://path/to/branch/branchName

Puede verificar dónde se cortó la rama del tronco haciendo un registro svn

svn log --stop-on-copy

respondido 18 nov., 13:14

Dado que hay varias ramas de desarrollo que están vivas al mismo tiempo, esto tampoco funcionaba para mí, este comando también estaba introduciendo cambios en otras ramas. ¿Puede ser esto un problema con el cliente SLik SVN? - Vanchinathan Chandrasekaran

Si bien esto no es inexacto, existen formas más fáciles de fusionar con versiones más recientes de svn (como el que está usando OP). - blahdiblah

@VanchinathanChandrasekaran, en el comando especifica el nombre de la rama como svn://path/to/branch/branchName eso debería extraer solo los cambios de esa rama, no de otras ramas. ¡Si es así estamos en peligro! - Federico Gauss

La sintaxis es incorrecta, debería ser

svn merge <what(the range)> <from(your dev branch)> <to(trunk/trunk local copy)>

respondido 02 mar '15, 10:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.