¿Cuál es la forma correcta de restaurar un archivo eliminado de SVN?


Borré un archivo de un repositorio y ahora quiero volver a ponerlo. Lo mejor que puedo averiguar es:

  • actualización de la revisión antes de la eliminación
  • copie los archivos en otro lugar
  • actualización a head
  • copie los archivos
  • añádelos
  • commit

Eso simplemente huele mal y pierde toda la historia para arrancar. Tiene que haber una mejor manera de hacer esto. Ya he buscado en El libro de SVN pero no encontré nada y ahora estoy buscando abajo en la lista de etiquetas SVN.

Author: leander, 2009-01-29

9 answers

Use svn merge:

svn merge -c -[rev num that deleted the file] http://<path to repository>

Así que un ejemplo:

svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk
             ^ The negative is important

Para TortoiseSVN (creo...)

  • Haga clic con el botón derecho en el Explorador, vaya a TortoiseSVN -> Merge...
  • Asegúrese de que" Combinar un rango de revisiones " esté seleccionado, haga clic en Siguiente
  • En el cuadro de texto" Rango de revisiones a fusionar", especifique la revisión que eliminó el archivo
  • Marque la casilla de verificación" Fusión inversa", haga clic en Siguiente
  • Haga clic en Combinar

Eso no ha sido probado, obstante.


Editado por OP : Esto funciona en mi versión de TortoiseSVN (el tipo antiguo sin el botón siguiente)

  • Vaya a la carpeta de la que se eliminaron las cosas
  • Haga clic con el botón derecho en el Explorador, vaya a TortoiseSVN -> Merge...
  • en la sección De ingrese la revisión que hizo la eliminación
  • en la sección A ingrese la revisión antes de la eliminación.
  • Haga clic en"fusionar"
  • commit

El truco es merge hacia atrás. Felicitaciones a sean.¡bright por señalarme en la dirección correcta!


Edit: Estamos usando diferentes versiones. El método que describí funcionó perfectamente con mi versión de TortoiseSVN.

También es de destacar que si hubo varios cambios en la confirmación que está fusionando a la inversa, querrá revertir esos otros cambios una vez que se realice la fusión antes de confirmar. Si no lo hace, esos cambios adicionales también se revertirán.

 51
Author: Sean Bright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-29 06:12:25

El problema con hacer una fusión svn como sugiere Sean Bright es que se reintroduce otros cambios realizados en la misma revisión que la eliminación. Una copia svn es una operación más específica que solo afectará a los archivos eliminados.

Usando Tortoise SVN puede resucitar un archivo que ha sido eliminado de su directorio de copia de trabajo y de revisiones posteriores de SVN, a través de una copia svn de la siguiente manera:

  • Vaya a la carpeta de la copia de trabajo que contenía file.
  • Haga clic derecho en la carpeta en el Explorador, vaya a TortoiseSVN -> Show log.
  • Haga clic derecho en el número de revisión justo antes de la revisión que eliminó el archivo y seleccione "Examinar repositorio".
  • Haga clic derecho en el archivo eliminado y seleccione " Copiar a la copia de trabajo..."y salvar.

El archivo eliminado ahora estará en la carpeta de la copia de trabajo. Para volver a agregarlo a SVN, haga clic derecho en el archivo restaurado y seleccione SVN Commit.

NB: Este método preservará el historial anterior del archivo restaurado, sin embargo, para ver el historial anterior en el registro de TortoiseSVN, debe asegurarse de que "Detener al copiar/renombrar" esté desactivado en el diálogo Mensajes de registro.

 161
Author: tekumara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-20 22:46:20

Para completar, esto es lo que habrías encontrado en el libro svn, si hubieras sabido qué buscar. Es lo que ya has descubierto:

Deshacer cambios

Resucitar Elementos eliminados

Lo mismo, de la versión más reciente (y detallada) del libro:

Deshacer cambios

Resucitar Elementos eliminados

 25
Author: gbarry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-29 18:41:25

Utilice la funcionalidad de copia SVN de Tortoise para revertir los cambios comprometidos:

  1. Haga clic con el botón derecho en la carpeta principal que contiene los archivos eliminados/carpeta
  2. Seleccione el"show log"
  3. Seleccione y haga clic derecho en la versión antes de la cual se realizaron los cambios/eliminados
  4. Seleccione el"browse repository"
  5. Seleccione el archivo / carpeta que necesita ser restaurado y haga clic derecho
  6. Seleccione "copiar a" que copiará los archivos / carpetas a la cabeza revisión

Espero que ayude

 15
Author: Mukul Joshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-12 14:28:46

Siempre uso svn copy como una operación de servidor, así que no estoy seguro de si funciona con dos rutas de trabajo.

Aquí hay un ejemplo de restaurar un archivo eliminado en una copia local de trabajo del proyecto:

svn copy https://repos/project/modules/module.js@3502 modules/module.js

Mientras está dentro del directorio del proyecto. Esto también funciona para restaurar directorios enteros.

 11
Author: NullPoiиteя,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-17 10:59:07

Si está utilizando Tortoise SVN, debería ser capaz de revertir los cambios de solo esa revisión a su copia de trabajo (realizando efectivamente una fusión inversa), luego haga otra confirmación para volver a agregar el archivo. Los pasos a seguir son:

  1. Busque la carpeta en la copia de trabajo donde eliminó el archivo.
  2. Vaya a repo-browser.
  3. Busque la revisión donde eliminó el archivo.
  4. En la lista de cambios, encuentre el archivo que eliminó.
  5. Haga clic derecho en el archivo y vaya a "Revert changes from this revision" (en inglés).
  6. Esto restaurará el archivo a su copia de trabajo, manteniendo el historial.
  7. Confirme el archivo para añadirlo de nuevo a su repositorio.
 5
Author: davogones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-30 01:07:28

Con Tortuga SVN :

Si aún no ha confirmado sus cambios, puede hacer una reversión en la carpeta principal donde eliminó el archivo o directorio.

Si ya ha confirmado el archivo eliminado, puede usar el navegador del repositorio, cambiar a la revisión donde aún existía el archivo y luego usar el comando Copiar a... desde el menú contextual. Ingrese la ruta a su copia de trabajo como destino y el archivo eliminado se copiará desde el repositorio a su copia de trabajo.

 4
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-29 05:09:11

La forma más fácil que he podido restaurar archivos y no perder el historial de revisiones es usando SVN copy, el ejemplo de fusión anterior me parece una forma más compleja de lograr lo mismo. ¿Por qué es necesario fusionar cuando simplemente desea restaurar una revisión?

Utilizo lo siguiente en esta instancia y funciona bastante bien.

svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs

Siempre uso svn copy como una operación de servidor, por lo que no estoy seguro de si funciona con dos rutas de trabajo.

 4
Author: Daniel Honig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-31 11:16:01

Debería poder simplemente revisar el archivo que desea restaurar. Intente algo como svn co svn://your_repos/path/to/file/you/want/to/restore@rev donde rev es la última revisión en la que existió el archivo.

Tuve que hacer exactamente esto hace un rato y si no recuerdo mal, usar la opción -r para svn no funcionó; tuve que usar la sintaxis :rev. (Aunque podría haberlo recordado al revés...)

 0
Author: David Z,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-29 05:02:37