¿Cómo "recuperar" una carpeta eliminada en Subversion / TortoiseSVN?

96

Hemos eliminado accidentalmente la carpeta 'etiquetas' de nuestro repositorio de Subversion donde solo pretendíamos eliminar una etiqueta específica. ¿Cuál es la forma más sencilla de recuperar la carpeta 'etiquetas'?

Usamos TortoiseSVN como nuestro cliente y pensé que cuando vaya al navegador de repositorios y muestre el registro, habrá algo como "revertir los cambios de esta revisión" de manera similar a lo que puede ver en un diálogo similar en su copia de trabajo. Pero no existe tal comando allí ...

Borek Bernard
fuente

Respuestas:

115

Simplemente copie la carpeta eliminada de una revisión anterior.

En el Navegador del repositorio, haga clic en el botón etiquetado HEAD (en la esquina superior derecha) para mostrar una revisión allí donde aún existe su carpeta, luego haga clic con el botón derecho en esa carpeta y seleccione "Copiar a ..." e ingrese la ruta allí desea que se vuelva a crear la carpeta (probablemente la misma ruta que ya está en el cuadro de texto).

Mikael Sundberg
fuente
4
Buen consejo, gracias. One TortoiseSVN lo consiguió: en ese cuadro de diálogo "copiar a ..." tuve que cambiar la ruta de 'example.com/svn/tags' a 'tags1' y luego volver para que el botón Aceptar se habilitara.
Borek Bernard
2
Esto podría estar bien para las etiquetas, pero no se debe hacer para recuperar cualquier otra carpeta ya que se perderá la historia
slckin
3
Mantiene la historia, simplemente lo hizo también.
acdcjunior
solo asegúrese de desmarcar "Detener al copiar / cambiar el nombre" al ver el registro, porque de lo contrario TortoiseSVN no mostrará el historial antes de su acción de restauración (obviamente) ...
Oli
Funcionó totalmente. Me ahorré mucho tiempo. Gracias :)
dgupta3091
78

para los entusiastas de la línea de comandos:

  • primero busque el número de revisión donde ocurrió su eliminación:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

digamos que encuentra que el directorio fue eliminado en la revisión 999 (por cierto: puede que le resulte más fácil encontrar el número de revisión con el navegador de repositorios svn)

  • copiar la carpeta de la revisión menos 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

voilà ¡has terminado!

en su caso, esto podría ser:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"
raudi
fuente
1
Gracias ... ahorré mucho tiempo
Dharani Kumar
¡Esto acaba de salvarme el tocino!
axiopisty
Solo quería confirmar que el enfoque "svn copy" de hecho preserva todo el historial, y para las carpetas opera de forma recursiva, restaurando la carpeta y todos los elementos secundarios.
WallStProg
11

La mayoría de estas respuestas funcionarán hasta cierto punto, pero la respuesta correcta es la de Daniel. Haz una fusión inversa. De esa forma, mantienes el historial de versiones.

svn merge -r R1:R2

donde R1 es la revisión en la que se encuentra y R2 es la revisión que contiene el archivo / carpeta eliminados.

Millas
fuente
1
En una fusión inversa, R1 debería ser la revisión que desea revertir, siendo R2 la revisión anterior.
arleslie
2
No pierdes ningún historial con svn copy.
maxschlepzig
Para aquellos de nosotros que no somos entusiastas de la línea de comandos, consulte: tortoisesvn.net/docs/nightly/TortoiseSVN_en/…
Pascal
2
¿No restauraría esto todos los archivos / carpetas eliminados? ¿Funcionaría esto si solo quiero restaurar una carpeta eliminada específica pero no otras carpetas eliminadas?
DO 7 de
8

Deberá realizar una fusión inversa .

Para obtener detalles sobre cómo hacerlo (y prácticamente cualquier otra cosa que desee o necesite hacer con SVN), el libro oficial está disponible en línea .

Daniel
fuente
3

Siguiendo la respuesta de raudi que funcionó para mí después de esta revisión.

Algunos clientes svn pueden necesitar el número de revisión especificado usando el parámetro -r revision en lugar de usar @ después de la carpeta de la siguiente manera:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"
Pablo
fuente
Si está restaurando desde una carpeta que aún existe -r <revision>, funcionará. Sin embargo, si está intentando restaurar la carpeta directamente, deberá usar @<revision>. De lo contrario, le dirá que no se encontró el archivo.
arleslie
2

Vaya a Repository Browsersu repository, haga clic derecho en la carpeta principal donde existía su carpeta eliminada . Ahora, Show Logde la carpeta principal y seleccione la revisión anterior donde cometió la operación de eliminación. Tendrá una lista y haga clic derecho en la carpeta de la información de revisión y seleccione Update to this Revision.

Estás listo

Abdul Munim
fuente
Oh, ya veo, no estaba en el cuadro de diálogo Mostrar registro, sino en la ventana principal del navegador de repositorios. Aún así, ese comando intentará actualizar mi copia de trabajo local mientras me gustaría solucionar este problema en el servidor directamente (puede imaginar que revisar cientos de etiquetas, cada una con miles de archivos, no es exactamente lo que me gustaría que hacer).
Borek Bernard
Funcionó para mí. La opción del menú contextual (al hacer clic con el botón derecho) es "Revertir los cambios de esta revisión" y fusionaría los cambios de forma inversa.
hsg