Quiero eliminar revisiones de mi repositorio SVN

33

Las últimas revisiones en mi repositorio de código se han dañado y han desestabilizado mi aplicación. Quiero volver a una revisión anterior.

Pero no quiero simplemente usar 'revertir' en mi copia de trabajo; De hecho, quiero eliminar mi revisión principal y varias revisiones anteriores en mi repositorio, 'revertiendo' mi repositorio a una revisión anterior, que se convertiría en la revisión principal. Alguien sabe cómo haría esto?

Sathyajith Bhat
fuente
1
Realmente no puede eliminar las revisiones antiguas, todo lo que puede hacer es revertir los cambios y confirmarlo, como lo menciona Felix. Sidenote interesante, Git (así como otras soluciones de control de versiones) en realidad hace que pueda verdaderamente revisiones de borrado ..
Davr
3
Sí, puede, solo necesita acceder al repositorio SVN con svnadmin. Vea mi respuesta a continuación.
martin
davr es técnicamente correcto. Lo que describe es descartar todas las revisiones, excepto las malas, y luego descartar esto sobre el antiguo repositorio. En mi opinión, eso no es realmente lo mismo que 'eliminar' una revisión.
Sirex

Respuestas:

12

Quizás este enlace te ayude a:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Citar:

  1. Cambie al directorio superior dentro de su copia de trabajo (suponiendo que desee revertir toda la copia de trabajo).

  2. ejecute svn revertpara revertir los archivos de su copia de trabajo al estado en que se encontraban la última vez que confirmó / desprotegió.

  3. ejecute svn status -vpara ver a qué número de revisión corresponde ahora su copia de trabajo (es el número de revisión más alto en la lista que svn status -vproduce).

  4. ejecute svn merge -rXX:YYdónde XXestá el número que obtuvo en el paso anterior y YYes el número de la revisión a la que desea volver.

  5. ¡Hecho! La posible excepción a esto es que los archivos en su copia de trabajo que no existían cuando YYse realizó la revisión originalmente, todavía estarán allí, porque por defecto svn no elimina las cosas. Si desea deshacerse de ellos, ejecute un svn del [filename]en cada uno de ellos.

  6. ¡Bien hecho! Ahora juega con tu copia de trabajo como si todas esas ediciones intermedias nunca hubieran sucedido. Y cuando esté listo para comprometer sus esfuerzos, ¡simplemente use svn commit como de costumbre!

Felix
fuente
1
En Windows Os, ejecute la opción # 4 svn merge -rXX:YY .Recuerde recordar poner un punto al final de la línea para hacer referencia al directorio actual. Y en TortoiseSVN, hay una opción para invertir la fusión.
Shantha Kumara
3
En realidad, esto no revierte a "una revisión anterior, que se convertiría en la revisión principal". No hace que la revisión anterior sea HEAD. Más bien, crea una nueva CABEZA. Ver la respuesta de Martin.
Matthew Flaschen
Modifiqué la respuesta para incluir el comentario de Shantha sobre el período final. Esto es lo mismo en * nix también.
Mike Kormendy
72

Esto funcionó para mí. Dado que tiene la revisión 1234 como HEAD y desea revertir las últimas tres confirmaciones:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo
martín
fuente
12
+1. Eres el único que entendió la pregunta y dio una respuesta específica.
Matthew Flaschen
66
Esta es técnicamente la respuesta correcta. Sin embargo, debe señalarse que esto, además de ser bastante complicado de hacer, también invalidará todas las copias extraídas, por lo que deberá alertar a cualquiera que también esté utilizando el repositorio.
sleske
1
rápido y fácil y al grano y en realidad lo que pidió el cartel.
conectado el
77
Siempre y cuando se asegure de copiar también el UUID del repositorio en el nuevo repositorio (consulte "svnadmin setuuid", copiando desde el UUID en "svn info" en el antiguo repositorio), solo los pagos actualizados a las revisiones que está recortando ser invalidado
Bryan Petty
1
En los nuevos repositorios, es posible que deba corregir los permisos de los archivos o copiarlos en los directorios hooks / conf
AdamS
5

Sé que esta es una vieja pregunta, sin embargo, acabo de encontrar cómo hacer esto con Windows / TortoiseSVN.

Como sugiere un comentario, no puede "eliminar" una revisión, pero lo que puede hacer es hacer una revisión más actual que sea la misma a la que desea volver.

  1. Compruebe el HEAD del repositorio del directorio desde el que desea revertir la revisión.
  2. Cargue la vista "Mostrar registro" en TortoiseSVN para el directorio de nivel más alto que desea revertir (por ejemplo, "Troncal").
  3. Haga clic con el botón derecho en la revisión que desea eliminar NOTA: esta es la revisión que desea eliminar, no a la que desea volver.
  4. Seleccione "Revertir cambios de esta revisión".
  5. Haga clic en "Sí" en el mensaje.
  6. Actualice el pago como normal, pero a "HEAD".
  7. Compromételo de nuevo.

Luego irá a todos los demás que lo hayan verificado y haga que se actualicen y asegúrese de eliminar cualquier archivo nuevo.

Además, deberá asegurarse de que todos sepan cuál fue esa revisión y, potencialmente, actualizar la descripción.

Martín
fuente
¿en qué se diferencia eso del procedimiento normal de "reversión"?
Tomer W
Un Revertir simplemente cambia su copia de trabajo a lo que está en el repositorio ... así es como hacer que el HEAD de un informe refleje el estado de cualquier commit anterior.
Martin
1
Gracias por esto. Hacer esto al estilo SVN de tortuga fue justo lo que necesitaba para revertir un compromiso erróneo :)
Dr. Andrew Burnett-Thompson
También hay una entrada de menú contextual " Volver a esta revisión " en la ventana de registro.
Uwe Keim
4

Puede usar dump / load para este propósito.

También puede usar svnsync para hacer una copia de seguridad de alguna revisión.

Si tienes un gran repositorio, lleva tiempo.

Bac De Vietnam
fuente
3

Para mí (VisualSVN, 30-HEAD) funciona esto:

  del C: \ Repositorios \ MyRepo \ revs \ 0 \ 30
  del C: \ Repositorios \ MyRepo \ revs \ 0 \ 29
  del C: \ Repositorios \ MyRepo \ revs \ 0 \ 28
  del C: \ Repositorios \ MyRepo \ revprops \ 0 \ 30
  del C: \ Repositorios \ MyRepo \ revprops \ 0 \ 29
  del C: \ Repositorios \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Repositorios \ MyRepo \ db \ current
  

Anton Golikhoff
fuente
¿Cómo es esto mejor que otras respuestas?
Toto
Es mucho mas rapido.
Anton Golikhoff
0

Vaya a la terminal y navegue al svn repsitory: ahora escriba

svn update -r "número de revisión que desea revertir"

Mohd Ikram
fuente
2
¡Bienvenido a Super User! Por favor lea la pregunta otra vez cuidadosamente. Su respuesta no responde a la pregunta original. OP dice "No quiero simplemente usar 'revertir' en mi copia de trabajo"
DavidPostill