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).
Puede hacer un nuevo pago de una revisión en particular. http://svnbook.red-bean.com/en/1.1/re04.html
svn co path/to/my/repo -r 24
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"