2008-09-24 17 views
30

Supongamos que tengo un conjunto de confirmaciones en una carpeta de repositorio ...Deshacer en Subversion

123 (250 new files, 137 changed files, 14 deleted files) 
122 (150 changed files) 
121 (renamed folder) 
120 (90 changed files) 
119 (115 changed files, 14 deleted files, 12 added files) 
118 (113 changed files) 
117 (10 changed files) 

Quiero conseguir una copia de trabajo que incluye todos los cambios desde la revisión 117 en adelante, pero no incluye los cambios para las revisiones 118 y 120.

EDITAR: Para quizás aclarar el problema, quiero deshacer los cambios que se realizaron en 118 y 120 conservando todos los demás cambios. La carpeta contiene miles de archivos en cientos de subcarpetas.

¿Cuál es la mejor manera de lograr esto?

La respuesta, gracias a Bruno y Bert, es el comando (en este caso, para la eliminación de 120 después de que se realiza la combinación completa)

svn merge -c -120 . 

Tenga en cuenta que el número de revisión se debe especificar con una menos importante. '-120' no '120'

Respuesta

31

Para deshacer las revisiones 118 y 120:

svn up -r HEAD  # get latest revision 
svn merge -c -120 . # undo revision 120 
svn merge -c -118 . # undo revision 118 
svn commit   # after solving problems (if any) 

Véase también la descripción en Undoing changes.

Tenga en cuenta el menos en el argumento -c -120. El switch -c (o --change) es compatible desde Subversion 1.4, las versiones anteriores pueden usar -r 120:119.

-2

supongo que se podría crear una rama desde la revisión 117, y luego fusionar todo excepto 118 y 120.

svn copy -r 117 source destination 

entonces descargar esta rama, y ​​desde allí hacer svnmerge.py merge -r119,120-123

EDITAR: Esto no anula las revisiones en la bifurcación/tronco. Use svn merge en su lugar.

+1

Me pregunté sobre eso también ... ¿pero el éxito de esto no dependería mucho de si los mismos archivos se habían cambiado en 117, 118 y 119? ¿No existiría el riesgo de que recogiera algún artefacto del registro 118? –

8

Hay una manera más directa si usa TortoiseSVN, un cliente de Windows para Subversion. Simplemente haga clic para ver el registro en su copia de trabajo actualizada, seleccione las revisiones que desea deshacer, haga clic derecho y seleccione "Revertir cambios de estas revisiones".

Es una operación segura porque los cambios se aplican solo en su área de trabajo. Aún debe comprometerse a modificar su repositorio.

Es una de las mejores características de TortoiseSVN. Siempre he sido un tipo de línea de comando, pero Tortoise cambió de opinión.

+1

En una Mac, el cliente de SVN Cornerstone hace esto mejor. Probé Versions pero no puede competir con Cornerstone por este tipo de trabajo. –

+0

+1 Muy útil/sencillo para aquellos que usan TortoiseSVN. ¡Gracias por esto! –