¿Hay alguna forma de recuperarse de un "svn revert" accidental?

94

Me las arreglé para dispararme en el pie esta mañana haciendo lo siguiente:

  1. Empecé a trabajar en un cambio en mi proyecto.
  2. Realicé varias ediciones en varios archivos.
  3. Me di cuenta de que mi enfoque estaba mal y que necesitaba empezar de nuevo
  4. CD al nivel superior de mi proyecto e hice un "svn --recursive revert". para restaurar mi caja de arena local a su estado previo a los cambios.
  5. Aullé de horror cuando me di cuenta de que había habido una serie de otros cambios pendientes en mi caja de arena local, y los había borrado todos. (el servidor svn se había caído el viernes pasado, así que no pude registrarlos y me había olvidado de ellos durante el fin de semana)

Afortunadamente, en este caso, hice un "svn diff> temp.txt" antes de salir del trabajo el viernes, y el archivo temp.txt todavía estaba en mi disco duro, así que pude introducir ese archivo en "parche" y recuperar mi cambios perdidos.

Pero para mi referencia futura (es decir, la próxima vez que cometa el mismo error tonto) ... ¿hay alguna forma de decirle a svn que deshaga un "svn revert"? ¿Mantiene svn una copia de seguridad de las diferencias locales / no registradas en cualquier lugar?

Jeremy Friesner
fuente
34
IIRC TortoiseSVN mueve los archivos revertidos a la papelera de reciclaje, pero el cliente de línea de comandos SVN original no tiene tales matices.
Dario Solera
1
No encuentro el archivo en la papelera de reciclaje. ¿No tengo suerte?
Dalcantara
5
Comentario principal sobre la papelera de reciclaje. ¡Eso me acaba de salvar el día!
OrganicPanda
2
¡mío también! Muchas gracias. El archivo revertido apareció en mi papelera de reciclaje y podría restaurarse.
sladda
1
¡Acabas de salvarme el trasero con esta papelera de reciclaje!
Epirocks

Respuestas:

79

No, (absolutamente) NO .

Si le dice a Subversion que debería revertir un archivo, todos los cambios se han ido por el viento.

Solo tu memoria puede recuperarlos.

Excepción: los archivos nuevos que haya agregado solo perderán su estado "agregado", pero el archivo permanecerá en este directorio, solo se desconoce el estado ("?")

Excepción de plataforma / software: al usar TortoiseSVN en Windows, Revertir primero arroja los archivos a la Papelera de reciclaje y luego los revierte. Puede buscar en la Papelera de reciclaje para recuperar los archivos.

Peter Parker
fuente
10
Anexo a lo anterior: El control de versiones solo le ayuda si realmente confirma los archivos. Si está en una posición en la que eliminar su copia de trabajo acabará con horas de trabajo, entonces no se está comprometiendo con la frecuencia suficiente.
myron-semack
1
De acuerdo ... en este caso, el servidor svn estaba caído, y es por eso que todavía tenía pendientes cambios sin confirmar. : ^ (
Jeremy Friesner
13
¡¡¡Si!!! Hay una manera de recuperarse dependiendo de su O / S y / o IDE: ¡lea las otras respuestas a continuación antes de tener un ataque cardíaco!
HDave
2
Eso no es cierto, es un poco más complicado que un simple NO. Utilice una herramienta de recuperación o, si tiene suerte, los archivos están en la papelera de reciclaje.
RaphMclee
1
@RalphMclee: Depende de la plataforma y del cliente svn. TortoiseSVN guardará los archivos nuevos revertidos en la papelera de reciclaje. Esto es simplemente una excepción. Y dudo que una herramienta de recuperación pueda reconstruir los cambios de sus archivos de manera coherente. Es mucho más fácil y claro de recordar: ¡revertir destruirá tu trabajo, úsalo con cuidado!
Peter Parker
104

Hay una solución ... vaya a su papelera de reciclaje y encontrará allí la última versión del archivo eliminado. Tortuga "tirando" a la papelera de reciclaje cada archivo que revierte.

shto
fuente
2
Por cierto, esta es también la razón por la que TortoiseSVN parece tan lento cuando hace reversiones. Mover un archivo a la papelera de reciclaje es una operación muy lenta cuando la papelera de reciclaje está llena. Puede desactivar esta función en la configuración de "General - cuadros de diálogo 1" de TortoiseSVN.
Wim Coenen
8
¡Gracias tío, me salvaste! Accidentalmente hice Revert y casi pierdo 2 semanas de trabajo. Afortunadamente, lo encontré en la papelera de reciclaje.
Arie Livshin
2
@ArieLivshin, ¿por qué trabajarías durante 2 semanas sin comprometerte? Parece que necesita aprender más sobre las ramas.
JoelFan
Ankhsvn molesto no hace esto
Phil Hale
Gracias .. Muy útil ful.
Prem Singh Bist
32

No es realmente específico de Subversion, pero si está trabajando con Eclipse, puede probar suerte en la historia local.

Ahora, algo un poco más específico de Subversion: si no desea hacer una rama por cada cambio que haga, puede mantener un par de troncales desprotegidas localmente (trunk-modif-1, trunk-modif-2 .. .). Cada "modificación" se realiza en un árbol separado y sólo necesita mantener una lista de las que corresponden a las modificaciones.

O puedes usar Git localmente pero nunca lo probé.

Vladimir
fuente
3
Para su información, acceda al historial local a través del menú contextual del botón derecho "Restaurar del historial local".
HDave
Para la parte de Eclipse, aquí hay una respuesta más concreta: stackoverflow.com/a/18220708/517705
Sk8erPeter
14

Recientemente cometí este error de no realizar nuevos cambios de archivo (alrededor de 10) en SVN y todos desaparecieron debido a mi tonto error. Pero lo que me salvó fue la opción de Windows "Restaurar versiones anteriores" en el menú contextual. Uf, eso fue un alivio y una lección aprendida.

JProgrammer
fuente
¡Gracias! ¡Esto me salvó de rehacer horas de trabajo! Nunca antes había visto esta característica de Windows, ¡pero me salvó el tocino!
NibblyPig
¿A dónde puedo enviar los $ 6000 que le debo por esto habiendo ahorrado así días de trabajo? Lección aprendida ...
HDave
Gracias, me salvó el día.
Opax Web
Mantengo desactivado el punto de control que admite dicha restauración porque arruina el rendimiento. Recientemente, Eclipse eliminó una carpeta de mis proyectos, incluido su archivo git, debido a un problema con su función Deshacer, y más bien deseaba tenerlo activado. Sin embargo, un programa de Windows llamado Recuva me salvó al buscar en el espacio de archivos eliminado. Tuve mucho cuidado de no agregar contenido adicional a la unidad afectada hasta que recuperé todos mis archivos, y me dio todos los archivos de origen cambiados desde mi copia de seguridad más reciente una semana antes. La mayoría de los archivos binarios no eran recuperables.
Carl
8

No puede recuperar los archivos si está utilizando el cliente de línea de comandos svn .

Pero puede recuperarlos, si está utilizando TortoiseSVN como su cliente svn. TortoiseSVN los moverá automáticamente a su Papelera de reciclaje. Puede restaurarlos desde allí después de una reversión accidental.

Esta es una opción configurable en TortoiseSVN. Está en Configuración -> Cuadro de diálogo 1 -> Usar papelera de reciclaje al revertir.

De forma predeterminada, está marcada, lo que significa que los archivos se mueven a la papelera de reciclaje. Si lo desea (en general, no le importa desactivar esto. Si tiene un motivo, hágamelo saber también)

Manohar
fuente
1
¡Impresionante! ... me salvó
Janani Kumar
6

Si está utilizando InteliJ, entonces es una persona afortunada. En el menú superior, tiene una opción de Control de versiones, y debajo de ella encontrará la opción de historial local, donde encontrará todo el historial del archivo seleccionado, incluida toda la operación que hizo con ese archivo (actualizar, confirmar, revertir).

Buena suerte, Arkde

Aureliano Cotuna
fuente
1
Y si era un archivo nuevo, el archivo en sí se eliminará. En ese caso, seleccione la carpeta en la que se encontraba el archivo desde la vista Proyecto y luego seleccione 'Historial local'. IntelliJ salvó el día de nuevo.
Nufail
4

Además, si ha revertido su código .NET (archivos .cs, etc.) y ha creado su aplicación antes de revertir, pero después de haber realizado cambios, puede recuperar los cambios del archivo de ensamblaje utilizando cualquiera de las herramientas de reflector para ver el código.

scor4er
fuente
2

Revertí la solución (Visual Studio + AnkhSVN) y perdí los cambios de algunos archivos. No encuentro el archivo en la papelera de reciclaje.

PERO: Recuperé mis archivos perdidos con Handy Recovery, es decir, SVN simplemente borré mis archivos al revertir.

Use cualquier software de recuperación de datos para recuperar archivos revertidos (como Handy Recovery de prueba )

Peter Barbanyaga
fuente
2

Tuve mucha suerte de encontrar un registro de cambios local del archivo (Revisiones locales) en el navegador de historial en Eclipse. Había estado inspeccionando las diferencias una por una y había guardado un par de veces en el archivo antes de sobrescribirlo.

fyts
fuente
1

No, SVN no mantiene un registro ni una copia de seguridad (aunque hay una solución para TortoiseSVN indicada en las otras respuestas).

Pero en caso de que alguien esté examinando las respuestas y no haya notado este comentario en la pregunta del OP:

"Afortunadamente, en este caso, hice un" svn diff> temp.txt "antes de salir del trabajo el viernes, y el archivo temp.txt todavía estaba en mi disco duro, por lo que pude introducir ese archivo en" parche "y recuperar mis cambios perdidos ".

Me imagino que es un paradigma común hacer 'svn diff' ANTES de hacer un 'svn revert'. Si adquiere el hábito de hacer esto, incluso si la diferencia se hace eco en la terminal, al menos tiene una vía posible para recuperar los cambios perdidos.

shaneb
fuente