Pregunta

Qué, alguien en mi equipo cometió un "error" para eliminar varios archivos en la revisión actual del repositorio del equipo. ¿Es posible actualizar la versión local actual a la revisión de la cabeza? Cuando hago clic en Commit, Subclipse no reconoce los archivos faltantes para cargarlos.

Gracias por adelantado,
rayt

¿Fue útil?

Solución

¡Oh, por el amor de Pete! Las respuestas hasta ahora han sido, en el mejor de los casos, engañosas.

De tu pregunta, parece que estabas intentando algo como esto:

svn update -r8
# ok, I can see the deleted file now
svn commit -m "I want r8 to be newest"

Excepto que eso no funcionará. No hay modificaciones para comprometerse. Puede actualizar las revisiones más antiguas, pero no puede hacer cambios allí. No puedes cambiar el pasado. Solo puede cometer una nueva revisión, deshaciendo el daño.

Ok, supongamos que su repositorio está en svn: // repo. Aquí, un ejemplo simplificado en el que el tronco de la carpeta contiene dos archivos, "A" y "B". Llamemos a esta revisión 8 (R8).

trunk    # working copy of svn://repo/trunk
    a
    b

JR Hacker, se desliza y elimina accidentalmente B:

svn rm b
svn commit -m "oops"

Llamemos al Commit R9 resultante.

Entonces, la próxima vez que actualice desde el repositorio,

svn update

trunk
    a

B desaparece! ¿Pánico? No. Este es un sistema de control de versiones. Cualquier cosa que haya sido registrada puede ser restaurada. Aquí hay dos posibilidades:

Sólo Copiar El archivo de una revisión anterior, es decir, la última revisión donde todavía existía: 8.

svn cp svn://repo/trunk/b@8 .
svn commit -m "restored b from revision 8"

La solución más general es usar un unir. Puede usar esta técnica para deshacer más que una simple eliminación.

svn merge -r9:8 . .
svn commit -m "reverted the changes made in revision 8"

La forma de leer esta fusión es:

Primero calcule qué cambios deben realizarse para obtener de R9 (atrás) a R8 de la carpeta de repositorio (SVN: // Repo/Trunk) asociado con el directorio actual (el primero "."). Ahora, realice esos cambios en la copia de trabajo en el directorio actual (el segundo ".").

Hay una sintaxis más conveniente si solo está volviendo un solo cambio:

svn merge -c-8  . . #note the minus sign before the 8

Si no está usando SVN desde la línea de comando, hungue un poco alrededor de su herramienta, seguramente encontrará algo. Tortoisesvn, por ejemplo, tiene el práctico "revertir los cambios de esta revisión" cuando abre un registro de una copia de trabajo.

Otros consejos

Tome una copia de los archivos eliminados en SVN de su revisión en algún lugar (por ejemplo, una carpeta temporal en su escritorio), luego actualice (que eliminará los archivos originales, según la acción de eliminación comprometida de su compañero de trabajo), luego mueva sus copias hacia atrás y comprometerlos de nuevo en SVN.

Haría lo siguiente:

Encuentre el número de revisión antes del Delete ... Haga un vertedero Svnadmin -R1: [GoodrevisionNumber aquí]> file.dump.

Luego, cree un nuevo repositorio, "svnadmin crea [nombre del repositorio] y luego cargue el volcado en el nuevo repositorio. "Svnadmin load [newRepositoryName] <file.dump.

Luego, consulte esta revisión y copie los archivos del revés anterior en el nuevo y confirme.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top