167 votos

Mejor manera de volver a una anterior SVN revisión de un archivo?

Por error, he cometido demasiados archivos en un repositorio SVN y cambiado algunas cosas que no quise decir. (Suspirando.) Con el fin de volver a su estado anterior, lo mejor que se me ocurrió fue

svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx

Por dios! No hay mejor manera? ¿Por qué no puedo escribir algo como esto:

svn revert -r 854 l3toks.dtx

Bueno, sólo estoy usando v1.4.4, pero yo desnatada sobre la lista de cambios para el 1.5 rama y yo no podía ver nada, directamente relacionadas con esta. ¿Se me olvida algo?


Edit: supongo que no fue lo suficientemente clara. Yo no creo que quieran fusión inversa, porque entonces me voy a perder los cambios que me hizo querer hacer! Dicen que fileA y fileB ambos fueron modificados, pero yo sólo quería comprometerse fileA; accidentalmente escribe

svn commit -m "small change"

compromete a ambos archivos, y ahora quiero volver a rodar fileB. Revertir la fusión hace esta tarea más fácil (por lo que puedo decir) de los pasos que he descrito.

243voto

orip Puntos 28225
svn merge -r 854:853 l3toks.dtx

o

svn merge -c -854 l3toks.dtx

35voto

luapyad Puntos 2680

Echa un vistazo a "deshacer cambios" de la sección de la svn libro

32voto

sdaau Puntos 6262

lo siento, el uso de espacio en sólo una reiteración de la respuesta -, pero esto es algo que siempre terminan en problemas.

Digamos que he actualizado los archivos locales a la última revisión, que se 854. Entonces, me gustaría obtener una versión anterior - la versión del archivo de unos revisión anterior, revisión decir 851.

Copia de trabajo:

svn copy -r 851 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx

.. sin embargo, yo no puedo ser molestado grepping de la repo :URL:)

Actualización aparentemente podría funcionar:

svn up -r 851 ./l3toks.dtx

... sin embargo, también marca la copia local como "recién desprotegido", o más bien "la misma línea de revisión" (es decir. en Tortuga/RabbitVCS de obtener una green ACEPTAR marca de verificación) - lo que significa que usted no puede hacer svn ci -m "rolled back to r 851": simplemente porque el local subversion ejecutable no notarás cambios locales, y de no ser molestado a subir nada para el repositorio en línea.

Y, como ya se ha respondido, fusión inversa funciona - pero en este caso, no hay que basarse en la sintaxis de método abreviado; pero específicamente estado:

svn merge -r HEAD:851 l3toks.dtx
--- Reverse-merging r854 through r852 into 'l3toks.dtx':
U    l3toks.dtx

Debo admitir - yo nunca iba a entender la frase "Inversa a la fusión de r854 a través de r852 en el archivo" significa "Acabo de r851 de su archivo y sobrescribir lo que tenía previamente a nivel local - y se marca como diferente de la última línea de revisión, para que pueda comprobar de nuevo en línea como un nuevo " rollback " revisión", pero supongo (y espero :) ) que es lo que hace :)

Después de esto, uno puede usar svn diff para un rápido maquillaje seguro de si tenemos el derecho de revisión de la espalda localmente; y también, el archivo se marca con un signo de exclamación rojo en Tortuga/RabbitVCS (es decir, diferente de la última versión confirmada), y así, svn ci -m "rolled back to r 851" puede ejecutar este tiempo.

También, tenga en cuenta que si, finalmente, cambiar de opinión después de la fusión inversa (es decir. usted de todos modos desea continuar trabajando en la más reciente, la revisión HEAD, aquí 854 - después vuelve a 851 localmente, pero todavía no se ha comprometido la operación de deshacer), usted no debería usar svn up, porque simplemente va a decir que ya está "En revisión 854"; use en su lugar svn revert --recursive . o similar...

Saludos!

Ref: Cómo revertir los Cambios de uso de Subversion - Jacob Wright - Flex, AIR, PHP, etc.

EDIT: ... y, al parecer, exactamente el mismo efecto como svn merge -r HEAD:851 l3toks.dtx, se puede lograr con:

svn export -r 851 l3toks.dtx
A    l3toks.dtx
Export complete.

10voto

Igor Puntos 101

Hace poco he tenido que volver a una revisión en particular para depurar una compilación anterior y esto funcionó como magia:

svn up -r 3340 (or what ever your desired revision number)

Tuve que resolver todos los conflictos en el uso de "tc" como opción de no me importa acerca de los cambios locales (comprobado en todo lo que me importaba antes de revertir)

Para volver a la cabeza de la revisión era sencillo también:

svn up

Saludos, Igor

5voto

rmeador Puntos 15107

Lo que buscas se llama "fusión inversa". Usted debe consultar la documentación respecto a la función de combinación en el SVN libro (como luapyad, o más precisamente, el primer comentario en ese post, los puntos de salida). Si usted está utilizando la Tortuga, también puede ir en la vista del registro y haga clic derecho y elija "revertir cambios de esta revisión" en donde se cometió el error.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X