Pregunta

Eliminé un archivo de un repositorio y ahora quiero volver a colocarlo. Lo mejor que puedo entender es:

  • actualización de la revisión antes de la eliminación
  • copie los archivos en otro lugar
  • actualizar a la cabeza
  • copia los archivos de nuevo
  • agregarlos
  • commit

Eso huele mal y pierde todo el historial para arrancar. Tiene que haber una mejor manera de hacer esto. Ya he buscado en El libro SVN pero no encontré nada y ahora estoy mirando la etiqueta SVN lista.

¿Fue útil?

Solución

Use svn merge:

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

Entonces, un ejemplo:

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

Para TortoiseSVN (creo ...)

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

Sin embargo, eso no se ha probado por completo.


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

  • Vaya a la carpeta desde la que se eliminó el material
  • Haga clic derecho en el Explorador, vaya a TortoiseSVN - > Fusionar ...
  • en la sección De ingrese la revisión que eliminó
  • en la sección Para ingrese la revisión antes de la eliminación.
  • Haga clic en " fusionar "
  • commit

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


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

También es de notar que si hubo múltiples cambios en la confirmación, está invirtiendo la fusión, querrá revertir esos otros cambios una vez que la fusión se realiza antes de la confirmación. Si no lo hace, esos cambios adicionales también se revertirán.

Otros consejos

El problema de hacer una fusión svn como lo sugiere Sean Bright es que 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 SVN posteriores, a través de una copia svn de la siguiente manera:

  • Busque la carpeta de copia de trabajo que anteriormente contenía el archivo.
  • Haga clic derecho en la carpeta en el Explorador, vaya a TortoiseSVN - > Mostrar registro.
  • 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 copia de trabajo ... " y guardar.

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

NB: este método conservará el historial anterior del archivo restaurado, sin embargo, para ver el historial anterior en el registro de TortoiseSVN, debe asegurarse de que " Stop on copy / rename " está desmarcado en el cuadro de diálogo Mensajes de registro.

Para completar, esto es lo que habría encontrado en el libro svn, si hubiera 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

Elementos resucitados eliminados

Use la funcionalidad de copia de Tortoise SVN para revertir los cambios confirmados:

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

Espero que ayude

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

Aquí hay un ejemplo de restauración de un archivo eliminado en una copia de trabajo local 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 completos.

Si está utilizando Tortoise SVN, debería poder revertir los cambios de esa revisión en su copia de trabajo (realizando efectivamente una fusión inversa), luego realice 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. Ir al navegador de repositorios.
  3. Busque la revisión donde eliminó el archivo.
  4. En la lista de cambios, busque el archivo que eliminó.
  5. Haga clic derecho en el archivo y vaya a " Revertir los cambios de esta revisión " ;.
  6. Esto restaurará el archivo a su copia de trabajo, manteniendo el historial.
  7. Confirma el archivo para volver a agregarlo a tu repositorio.

Con Tortoise 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 todavía 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á del repositorio a su copia de trabajo.

La forma más fácil de restaurar archivos y no perder el historial de revisiones es usando copia SVN , el ejemplo de fusión anterior me parece una forma más compleja de lograr lo mismo. ¿Por qué es necesario fusionarse 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

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

Debería poder verificar el único archivo que desea restaurar. Pruebe 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 tiempo 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 ...)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top