una tortoise revertir regresar desvincular descartar changes carpeta cambios anterior svn revert

tortoise - Revertir o revertir el repositorio svn completo a una revisión anterior



svn revert to revision (14)

Me equivoqué en mi repositorio SVN y ahora necesito revertir todo el repositorio desde la revisión 28 a la 24 y no quiero lidiar con diferencias o conflictos. ¿Hay una manera rápida y simple de hacer esto? Pude revertir los archivos individuales antes de solucionarlos con el comando de combinación, pero en este caso quiere volver a agregar todos los archivos en el repositorio desde la revisión 28 cuando lo único que realmente quiero hacer es eliminarlos.

Estoy usando la línea de comando en un cuadro de Linux (bash).

Gracias

EDITAR

¡Gracias por toda la ayuda! Lo arreglé por:

svnadmin create /svnroot/<repo>.fixed svnadmin dump -r 1:24 /svnroot/<repo> --incremental > dump.svn svnadmin load /svnroot/<repo>.fixed < dump.svn

Luego, colocando el repositorio anterior en una ubicación de respaldo y moviendo el archivo repo.fixed al repositorio.

¡Gracias de nuevo!


¿Podrías svn del directorio superior y luego svn copy ?

svn copy svnurl@version svnurl


Echa un vistazo a svnadmin dump / load. Crea un archivo de texto con cada versión de tus archivos. Es posible eliminar todo lo anterior / debajo de cierto punto y volver a importarlo.

Consulte, por ejemplo, la migración de datos de repositorios en otros lugares


No estoy del todo seguro de si esto funciona, ya que aún no lo he usado en una producción en vivo, pero ahora probé en un repositorio de pruebas (copié uno de mis reproductores) y parece funcionar.

Cuando esté en su repositorio, use el siguiente comando:

svn update -r 24 trunk

Donde 24 es el número de revisión y trunk es el archivo / carpeta que desea actualizar (o restablecer, en este caso) a dicho número de revisión.

En mi prueba, varios archivos fueron actualizados y (re) agregados, y después de hacer un commit no recibí ninguna advertencia de ningún tipo. Luego modifiqué un archivo con algún texto ficticio y probé otra confirmación, y solo apareció dicho archivo en la lista modificada. ¡Parece que funciona bastante bien!

De nuevo, no usé esto antes en producciones en vivo, así que si me equivoco, por favor, avisen. Me encantaría saber si este es el camino a seguir, también, porque puedo verme a mí mismo necesitando esto en el (próximo) futuro.

-Dave


Odio decir esto, pero esa es una situación en la que me he encontrado utilizando copias de seguridad de mi repositorio svn.

¿Puedes copiar archivos de una determinada revisión a un nuevo directorio dentro del repositorio?


Para cualquiera que use TortoiseSVN, la solución es simple:

  • ver registro de cambios
  • haga clic derecho en la revisión que desea revertir a ...
  • ... selecciona "Volver a esta revisión"
  • cometer sus cambios

Este método conserva el historial de versiones (es decir, todas las revisiones que ha revertido).



Si la estructura de la carpeta de su aplicación no ha cambiado, revise la revisión anterior y reemplace las carpetas .svn de la revisión más reciente en la revisión anterior desprotegida. Ahora puede enviar la versión "anterior".


Si no haces uso de los derechos de administrador, entonces no puedes borrar ninguna revisión anterior, PERO aún puedes ocultarlos extremadamente bien con solo un comando "svn copy" increíblemente simple (nickf y JesperE ya lo mencionan, pero de una manera bastante críptica)

svn delete protocol: // svnserver / some / resource
svn copy protocol: // svnserver / some / resource @ 24 protocolo: // svnserver / some / resource

Y eso es todo, las revisiones 25 a 28 han desaparecido por completo de svn log. No es un truco en absoluto, es una característica segura y (apenas ...) documentada.

Si "resource" es un directorio, debe quitarlo de la última URL:

svn copy protocol: // svnserver / some / directory @ 24 protocolo: // svnserver / some /

(de lo contrario, lo copiarías dentro de sí mismo)


Si realmente desea eliminar por completo los archivos del repositorio, debe hacer una svndump en un archivo, filtrar las revoluciones y / o rutas de archivos que no desea, crear un nuevo repositorio y svnload el volcado filtrado en el nuevo repositorio. Deberá leer detenidamente la sección del libro SVN sobre mantenimiento del repositorio antes de hacer algo de esto, y asegurarse de no eliminar el repositorio existente hasta que esté seguro de que el nuevo tiene lo que desea.


Si realmente necesita borrar la ''evidencia'' de que los archivos alguna vez existieron, debe hacer las acciones svndump / svnload descritas anteriormente.

En una situación "normal", en la que cometió un error, debe usar fusión inversa. Esto asegura que deshacer los cambios después de r24 también se puede revertir, diferir, etc.

El siguiente comando debería funcionar para deshacer los cambios (debe confirmar el resultado de la fusión para reflejar la fusión en el repositorio)

svn merge -r 28:24


Si tiene acceso al servidor SVN, puede editar path/db/current , colocar el número de revisión anterior que desea revertir (aquí: 24) allí, y eliminar los archivos de revisión que ya no necesita (es decir, 25, 26, 27 , 28) desde path/db/revs/0/ . Al menos esto funcionó para mí hoy, después de haber eliminado accidentalmente un directorio en el repositorio.


Una combinación "inversa" puede ser lo que necesita. Ver la sección "deshacer cambios" del libro svn.

Por ejemplo, svn merge -r 28:24 [path to svn]


así es como comenzaría a hacerlo. Brutal, sí, pero es la única garantía de ignorar por completo las colisiones y mantener la historia de las revisiones intactas.

cd /scratchdir svn co -r good svn://repository cd /hosed_project svn up -r HEAD cat >> /tmp/cp.sh ORIG=$1 TARG=$( echo $ORIG | sed ''s///scratchdir////'' ); cp $ORIG /hosed_project/$TARG; ^D chmod u+x /tmp/cp.sh find /scratchdir -not -wholename "*/.svn*" -exec /tmp/cp.sh {} /;

Tenga en cuenta que esta no es la manera "normal" de OMI, la forma normal es crear una rama a partir de una versión anterior, y luego fusionar esa rama nuevamente en la cabeza. (al menos, así es como solía funcionar)

Editar: el código anterior no está probado, NO lo ejecute al pie de la letra


Example: Rev 100 all is working great Rev 101 somebody really corrupted the dir structure and / or merged in bad changes, etc. Rev 102 You delete /trunk Rev 103 You copy /trunk@100 to HEAD You now have a /trunk that reflects only Rev 100 and 103. Not 101 or 102. svn del svn://[RepoName]/trunk -m "removing issue in HEAD" svn copy svn://[RepoName]/trunk@100 svn://[RepoName]/trunk -m "Copy of correct revision of trunk to HEAD"