¿Cómo vuelvo a una versión anterior de nuestro código en Subversion?
Estoy trabajando en un proyecto con un amigo y quiero volver a una versión anterior de nuestro código y configurarla como la actual. ¿Cómo lo hago?
Estoy usando "anksvn" en vs08.
Tengo la versión que quiero en mi PC, pero la confirmación falla; El mensaje que recibo es "la confirmación falló, el archivo o directorio no está actualizado".
También tengo el cliente subversion en mi PC.
Básicamente, necesita "fusionar hacia atrás": aplicar una diferencia entre la versión actual y la anterior a la versión actual (para terminar con una copia de trabajo que se parece a la versión anterior) y luego confirmar nuevamente. Entonces, por ejemplo, para pasar de la revisión 150 (actual) a la revisión 140:
svn update
svn merge -r 150:140 .
svn commit -m "Rolled back to r140"
El Libro Rojo de Subversion tiene una buena sección sobre esto .
Sólo puedes confirmar nuevos cambios al principio del historial de subversión.
La razón por la que no puedes hacer nada directamente con la copia buena que tienes en tu PC es que sus .svn
carpetas saben que es código del pasado, por lo que requiere una actualización antes de cualquier confirmación.
Encuentre el buen número de revisión y revierta
Busque el número de revisión de la copia antigua que desea.
Obtenga su revisión actual con:
svn info --show-item revision # or svn log
O para comprobar versiones anteriores de su proyecto, utilice:
svn update -r <earlier_revision_number>
hasta que encuentre el número de revisión correcto.
Anote el número de revisión correcto (asumiendo
123
los ejemplos a continuación).Actualización a la última revisión:
svn update
Deshaga todos los cambios entre la revisión que desee y la última versión:
svn merge -r HEAD:123 . svn commit -m "Reverted to revision 123"
(Lo mismo que la respuesta anterior de Jon Skeet).
Si no puede encontrar el número de revisión
Si no puede encontrar la copia anterior y solo desea confirmar los archivos que se encuentran actualmente en su PC:
Haga una copia de su buena versión (pero sin
.svn
carpetas):cd .. rsync -ai --exclude=.svn project/ project-good/
Ahora asegúrese de tener la última versión:
cd project svn update # or make a fresh checkout svn checkout <url>
Copie su buena versión encima de la copia de trabajo.
Este comando copiará y también eliminará cualquier archivo del árbol de trabajo que no esté en su copia buena, pero no afectará las
.svn
carpetas existentes.cd .. rsync -ai --exclude=.svn --delete project-good/ project/
Si no tiene rsync, puede usarlo
cp -a
, pero también deberá eliminar manualmente los archivos no deseados.Deberías poder comprometer lo que tienes ahora.
cd project svn commit -m "Reverted to good copy"
Solo usa esta línea
svn update -r tuOldRevesion
Puede conocer su revisión actual utilizando:
información svn