Sí, pero no es para los débiles de corazón. Debe usar svnadmin dump
y svnadmin load
para recrear su repositorio.
Si elige hacer esto, el primer paso es evitar que sus usuarios cometan, y hacer una copia de seguridad de su repositorio. También recomiendo ver los pasos en una copia de su repositorio; puede usar rsync
para copiar todo el directorio del repositorio en un directorio temporal y trabajar desde allí.
Para estas instrucciones, voy a crear un nuevo repositorio en un directorio temporal:
tmp, 502> svnadmin create example.repo
tmp, 503> svn co file://`pwd`/example.repo example
Checked out revision 0.
he creado un archivo que contenía cuatro revisiones, la tercera de las cuales es necesario tachar:
example, 536> svn log test.txt
------------------------------------------------------------------------
r4 | kgregory | 2011-04-06 08:46:59 -0400 (Wed, 06 Apr 2011) | 1 line
post-bad commit
------------------------------------------------------------------------
r3 | kgregory | 2011-04-06 08:46:42 -0400 (Wed, 06 Apr 2011) | 1 line
bad revision
------------------------------------------------------------------------
r2 | kgregory | 2011-04-06 08:46:28 -0400 (Wed, 06 Apr 2011) | 1 line
good revision
------------------------------------------------------------------------
r1 | kgregory | 2011-04-06 08:46:02 -0400 (Wed, 06 Apr 2011) | 1 line
initial revision
------------------------------------------------------------------------
Por lo tanto, tenemos que volcar las revisiones tanto antes como después de la incorrecta, utilizando el indicador -r
para especificar los rangos de revisión. El indicador --incremental
en el segundo volcado es importante, ya que le indicará al comando de carga que no cree un nuevo archivo.
Tenga en cuenta que estoy ejecutando estos comandos desde el mismo directorio que contiene el repositorio.
svnadmin dump -r 1:2 example.repo/ > pred.svndump
* Dumped revision 1.
* Dumped revision 2.
tmp, 552> svnadmin dump -r 4:4 --incremental example.repo/ > succ.svndump
* Dumped revision 4.
Ahora mueve el repositorio original, fuera del camino, y crear un repositorio vacío con el mismo nombre:
tmp, 540> mv example.repo example.repo.bak
tmp, 541> svnadmin create example.repo
e importar el contenido de los archivos de volcado.
tmp, 569> svnadmin --quiet load example.repo < pred.svndump
tmp, 570> svnadmin --quiet --ignore-uuid load example.repo < succ.svndump
Ahora decirle a todos para borrar sus directorios de trabajo y echa un vistazo fresco.Y hay que ver el siguiente registro:
example, 574> svn log test.txt
------------------------------------------------------------------------
r3 | kgregory | 2011-04-06 08:46:59 -0400 (Wed, 06 Apr 2011) | 1 line
post-bad commit
------------------------------------------------------------------------
r2 | kgregory | 2011-04-06 08:46:28 -0400 (Wed, 06 Apr 2011) | 1 line
good revision
------------------------------------------------------------------------
r1 | kgregory | 2011-04-06 08:46:02 -0400 (Wed, 06 Apr 2011) | 1 line
initial revision
------------------------------------------------------------------------
Hay una enorme advertencia: este proceso supone que no ha habido ningún commit en el archivo desde la entrega mala (es decir, el sucesor de volcado sólo contiene cambios a otros archivos).
Si ese no es el caso, aún puede eliminar la revisión, pero es mucho más trabajo. Debe crear un nuevo check-in, que contenga una copia limpia del archivo junto con cualquier otro archivo que se haya cambiado con él mientras esté en mal estado. A continuación, cree varios archivos dump, sin incluir las revisiones que contengan el archivo incorrecto.
Finalmente: recomiendo encarecidamente varias carreras en seco. Como se puede ver en los números de historia en mis ejemplos, me equivoqué un par de veces. Como dije al principio, es fácil copiar un repositorio de Subversion en un directorio temporal. Y cuando lo haces, puedes seguir intentándolo hasta que lo hagas bien, luego simplemente copia el repositorio fijo en su lugar.
Gracias por su respuesta detallada. Sabiendo esto, decidimos que era más simple cambiar la contraseña en lugar de seguir los pasos que describió. – MasterScrat