2010-01-14 8 views
17

Soy nuevo en Subversion, pero he usado otros sistemas de control de revisiones como ClearCase por años.Subversion no puede fusionarse después de un movimiento

Mi jefe me pidió que arreglara este proyecto para que se pudiera construir con Maven en lugar de Ant. Una de las cosas importantes que tuve que hacer fue mover src/com a src/main/java/com, y mover test/com a src/test/java/com, lo cual hice usando el comando svn mv. Supuse tontamente que, como utilicé los comandos de Subversion para mover los directorios, esa Subversión sabría que las cosas se habían movido. Y cuando fusioné mi rama en el maletero, pareció funcionar. Pero ahora alguien más acaba de terminar el trabajo en una sucursal que se separó antes de mi trabajo. Así que vamos a fusionar sus cosas en trunk, y básicamente Subversion parece pensar "ok, hizo cambios en src/com/foo/bar/baz.java, pero ese directorio ya no existe, así que es irrelevante, así que deséchelo" en lugar de lo que esperaba , que era "bien, hizo cambios en src/com/foo/bar/baz.java, pero se movió src/com, así que necesito unirlo en src/main/java/com/foo/bar/baz.java".

¿Hay alguna manera de hacer que Subversion haga la gestión de revisiones, o voy a fusionar manualmente los cambios de este tipo para los próximos dos días?

+1

Acabo de recibir algo de esta "característica" también. Y estoy tratando de evitar la pesadilla de fusión manual. – granadaCoder

Respuesta

12

Para responder a su pregunta directamente:

¿Hay una manera de hacer que Subversion hacer la gestión de revisiones, o soy yo que va a ser manualmente la fusión de cambios de este tipo durante los próximos dos días?

Debería poder hacerlo un poco más fácil consigo mismo.

Una cosa que usted puede hacer para aliviar algo del dolor (suponiendo una distribución de la siguiente manera)

/branch/foo/src/com 
/branch/foo/test/com 
/trunk/src/main/java/com 
/trunk/src/test/java/com 

antes de mudarse src/com a src/main/java/com y prueba/com a src/test/java/com que podría haber hecho:

cd $TRUNK 
svn merge -r N:M http://server/branch/foo . 

lo que podría hacer ahora es:

cd $TRUNK 
svn merge -r N:M http://server/branch/foo/src/com src/main/java/com 
svn merge -r N:M http://server/branch/foo/test/com src/test/java/com 

esperanza esto ayuda a ahorrar algo hora.

+0

Ah hombre, ojalá hubiera visto esto antes de fusionar todo manualmente. –

2

Esto suena como un problema de una sola vez. Sugiero que puedas usar svn diff > /to/some/file.patch (o normal diff) para guardar sus cambios en un archivo, luego aplicarlo en tu tronco movido con patch -p0 < /to/some/file.path.

0

¿Alguien ha intentado este software? xMerge

Esto es un plugin para SmartSVN pero parece que sí lo es. Si alguien lo está usando, le agradeceré que me envíe una revisión del mismo.

0

Acabo de tener el mismo problema y lo resolví con git. No quise fusionar varios módulos con svn merge -r N:M http://server/branch/foo/test/com src/test/java/com para src/main, src/test y resources.

Así que usé git svn clone file:///some/repo -T trunk -b branches -t tags.De esta manera pude mantener git master en sincronía con svn trunk y fusionarlo con mi git branch. Cuando terminé, fusioné git branch con git master y de allí a svn trunk.

Cuestiones relacionadas