Al explorar la funcionalidad en Subversion, intenté probar el caso de uso descrito en la subsección Deshacer cambios de la sección Fusión básica del capítulo Ramificación y fusión del svnbook. Estoy usando la versión 1.6.4, pero el texto para esa sección es el mismo en ambas versiones del libro.Conflicto al intentar el ejemplo Deshacer cambios en Subversion
En mi directorio de copia de trabajo, edito un archivo testcode.py, agrego una línea por edición y la confirmo después de cada edición. Después de varias entregas, el archivo de texto es el siguiente:
this is my first import to trunk. r1.
this is my first commit, first edit of testcode.py. r2.
this is another edit of testcode.py. r3.
this is an edit of testcode.py. i'll get rid of this one. r4.
this is another edit of testcode.py. keeping it. r5.
yet another edit. keeping it. r6.
Los números de revisión en el partido repositorio hasta las líneas en el archivo de manera que en /trunk/[email protected], la última línea del archivo es el que termina con rN. Lo que quiero hacer es eliminar la línea que termina en r4, manteniendo todo lo demás antes y después sin cambios.
Siguiendo el ejemplo de la sección Deshaciendo cambios del svnbook, funciono con el comando
svn merge -c -4 file:///path_to_repos/trunk
Esto crea un conflicto (al ejecutar ese comando, no en comprometerse), por lo que el archivo de combinación izquierda contiene todo hasta la línea r4, y el archivo de fusión de derecha contiene todo hasta la línea r3. En otras palabras, en lugar de eliminar un cambio pasado, el comando parece querer revertir todo el archivo a la revisión 3 o 4, eliminando los cambios en las revisiones posteriores (5 y 6, en este caso).
La forma en que leo el ejemplo en el svnbook, que tiene el usuario revocando un cambio confirmado en la revisión 303 y confirmando el resultado a la revisión 350 sin conflictos, el comando que ejecuté debería haber producido un archivo con un estado svn de M que conserva todas las líneas excepto la que termina en r4.
¿Estoy leyendo incorrectamente el ejemplo del libro, es incorrecto el ejemplo, o hay alguna otra forma de error del usuario en el que me he caído por sorpresa?
Definitivamente reproducible. Ahora necesito pensar por qué sucede. –
Crear un parche con 'svn diff -c -4 foo.txt> foo.patch' y luego aplicarlo a' foo.txt @ HEAD' funciona como se esperaba - elimina la línea r4. –
Por lo tanto, los parches funcionan, pero "un caso de uso extremadamente común para ** svn merge **", como lo dice el libro svn, es sencillo y tiene su propia subsección, simplemente no. Esto no inspira confianza en el comportamiento de la función de fusión de Subversion en procedimientos más complicados, como las ramas de reintegración. – krosbonz