2010-02-15 26 views
86

Hemos eliminado accidentalmente la carpeta 'etiquetas' de nuestro repositorio de Subversion donde solo intentamos eliminar una etiqueta específica. ¿Cuál es la forma más fácil de recuperar la carpeta 'etiquetas'?Cómo "recuperar" una carpeta eliminada en Subversion/TortoiseSVN?

Utilizamos TortoiseSVN como cliente y pensé que cuando vaya al navegador repo y muestre el registro, habrá algo así como "revertir cambios de esta revisión" de manera similar a lo que puede ver en un diálogo similar en su trabajo dupdo. Pero no hay tal orden existe ...

Respuesta

102

Sólo tienes que copiar la carpeta eliminada de vuelta de una revisión anterior.

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

+4

Un gran consejo, gracias. One TortoiseSVN gotcha - en ese diálogo de "copiar a ..." tuve que cambiar la ruta de 'example.com/svn/tags' a 'tags1' y luego volver para que el botón Aceptar se active. – Borek

+2

Esto podría estar bien para las etiquetas, pero no debería hacerse para recuperar otra carpeta ya que perderá el historial – slckin

+1

¿Qué historial se perderá? –

2

Goto Repository Browser de su repository, haga clic en la carpeta principal donde existía el carpeta eliminada. Ahora, Show Log de la carpeta principal, y seleccione la revisión anterior en la que ha confirmado la operación de eliminación. Tendrás una lista y harás clic derecho en la carpeta desde la información de revisión y seleccionarás Update to this Revision.

Usted está hecho

+0

No hay tal comando allí, lo siento. – Borek

+0

Oh, veo, no estaba en el diálogo Mostrar registro, sino en la ventana principal del navegador repo. Aún así, ese comando intentará actualizar mi copia de trabajo local mientras me gustaría solucionar este problema directamente en el servidor (se puede imaginar que revisar cientos de etiquetas, cada una con miles de archivos, no es exactamente lo que me gustaría que hacer). – Borek

7

Tendrá que hacer 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 online.

+0

Consulte la respuesta de @Miles a continuación: http: // stackoverflow .com/a/11927209/179850 – Gray

66

para los entusiastas de la línea de comandos:

  • en primer lugar el número de revisión, donde pasó su borrado:

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

que usted encuentra que el directorio se ha eliminado en la revisión 999 (BTW: es posible que encuentre más fácil encontrar el número de revisión con el navegador svn repo)

  • copia la carpeta de revisión menos 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/[email protected] http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder" 
    

voilà ya está!

en su caso esto podría ser:

svn copy http://svnserver/project/[email protected] http://svnserver/project/tags -m "undeleted folder" 
+1

¡Gracias! Mucho más fácil en la línea de comando. – Derek

+0

Gracias ... guardado mucho tiempo –

+0

¡Esto acaba de salvar mi tocino! – axiopisty

2

A raíz de la respuesta de Raudi que funcionó para mí después de esta revisión.

Algunos clientes SVN podrían necesitar el número de revisión especificados usando el parámetro -r revisión en lugar de utilizar @ después de la carpeta de la siguiente manera:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder" 
+0

Si está restaurando desde una carpeta que todavía existe, '-r ' funcionará. Sin embargo, si intenta restaurar la carpeta directamente, deberá usar '@'. De lo contrario, te dirá que el archivo no se encontró. – arleslie

11

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

svn merge -r R1:R2

donde R1 es la revisión que usted está, y R2 es la revisión que contiene el archivo/carpeta eliminada.

+1

Esta es la respuesta correcta. Gracias Miles. – Gray

+1

En una combinación inversa, R1 debería ser la revisión que desea revertir, siendo R2 la revisión anterior. – arleslie

+1

No pierde ningún historial con 'svn copy'. – maxschlepzig

Cuestiones relacionadas