Estoy trabajando en un proyecto con un amigo y quiero volver a una versión anterior de nuestro código y configurarlo para que sea el actual. ¿Cómo lo hago?
Estoy usando "anksvn" en vs08.
Tengo la versión que quiero en mi PC, pero el commit falla; El mensaje que recibo es "error de confirmación, el archivo o directorio está desactualizado".
También tengo el cliente de subversión en mi PC.
svn merge -r HEAD:140
.Sólo se puede cometer nuevos cambios en la cabeza de la historia de la subversión.
La razón por la que no puede hacer nada directamente con la buena copia que tiene en su PC, es que sus
.svn
carpetas saben que es un código del pasado, por lo que requiere una actualización antes de cualquier confirmación.Encuentra el buen número de revisión y revierte
Encuentre el número de revisión de la copia anterior que desea.
Obtenga su revisión actual con:
O para verificar versiones anteriores de su proyecto, use:
hasta que encuentre el número de revisión correcto.
Anote el buen número de revisión (suponiendo los
123
ejemplos a continuación).Actualización a la última revisión:
Deshaga todos los cambios entre la revisión que desea y la última versión:
(lo mismo que la respuesta de Jon Skeet anterior).
Si no puede encontrar el número de revisión
Si no puede encontrar la copia anterior y solo desea confirmar los archivos actualmente en su PC:
Haga una copia de su buena versión (pero sin ninguna
.svn
carpeta):Ahora asegúrese de tener la última versión:
Copie su buena versión sobre la parte superior de la copia de trabajo.
Este comando copiará y también eliminará cualquier archivo del árbol de trabajo que no esté en su copia correcta, pero no afectará las
.svn
carpetas existentes .Si no tiene rsync, puede usarlo,
cp -a
pero también deberá eliminar cualquier archivo no deseado manualmente.Deberías poder cometer lo que tienes ahora.
fuente
Solo usa esta línea
Puede conocer su revisión actual utilizando:
fuente
La forma estándar de usar la combinación para deshacer el check-in completo funciona muy bien, si eso es lo que quieres hacer. Sin embargo, a veces, todo lo que quiere hacer es revertir un solo archivo. No hay una forma legítima de hacerlo, pero hay un truco:
Use el subcomando de exportación de svn:
svn export http: // url-to-your-file @ 123 / tmp / filename
(Donde 123 es el número de revisión para una buena versión del archivo). Luego mueva o copie ese archivo único para sobrescribir el antiguo. Registre el archivo modificado y ya está.
fuente
svn
también?svn cat -r 123 path-in-your-working-copy > path-in-your-working-copy
Un poco más de la vieja escuela
entonces lo habitual
fuente
Creo que esto es más adecuado:
Haga la fusión hacia atrás, por ejemplo, si el código confirmado contiene la revisión de la rev. 5612 a 5616, simplemente combínelo hacia atrás. Funciona en mi fin.
Por ejemplo:
Contendría un código combinado de regreso a la revisión anterior, entonces podría confirmarlo.
fuente
Esto es lo que hice y funcionó para mí.
Quiero deshacer los cambios en varias confirmaciones que hice para ciertos momentos y quiero ir al punto de confirmación anterior.
Esto ejecutará una fusión inversa, deshaciendo los cambios en su copia de trabajo.
Solo revise el código y confirme.
fuente
Haga clic derecho en la jerarquía más alta que desea revertir >>
Revert
oRevert to Revision
fuente
La mayoría de las respuestas anteriores han estado utilizando una combinación inversa, y esa suele ser la respuesta correcta. Sin embargo, hay una situación (que me acaba de ocurrir) en la que no está.
Accidentalmente cambié un archivo con terminaciones de línea Unix a terminaciones de línea DOS al hacer un pequeño cambio, y lo confirmé. Esto se deshace fácilmente, ya sea cambiando los finales de línea y confirmando nuevamente, o mediante una fusión inversa, pero tiene el efecto de hacer que la
svn blame
lista de mi edición sea la fuente de cada línea del archivo. (Curiosamente, TortoiseSVN en Windows no se ve afectado por esto; solo la línea de comandosvn blame
).Si desea mantener el historial según lo informado por
svn blame
, creo que debe hacer lo siguiente:La eliminación da un poco de miedo, pero recuerda que siempre tienes el archivo guardado en el repositorio, por lo que restaurarlo no es gran cosa. Aquí hay un código para ilustrar los pasos. Suponga que
xxx
es el número de revisión de la última copia válida.Tenga en cuenta que para una copia en el repositorio, el destino debe ser un directorio, no un nombre de archivo.
fuente
Haga clic derecho en el proyecto> Reemplazar con> Revisión o URL> Seleccione la revisión específica que desea revertir.
Ahora confirme la versión del código de actualización local en el repositorio. Esto revertirá la base del código a la revisión específica.
fuente
Hay muchas respuestas peligrosas en esta página. Tenga en cuenta que desde la versión 1.6 de SVN, hacer una actualización -r puede causar conflictos en los árboles, que rápidamente se convierten en una pesadilla kafkeresca que posiblemente pierda datos y busque en Google información sobre conflictos en los árboles.
La forma correcta de volver a una versión es:
Donde 12345 es el número de versión. No olvides el punto.
fuente
Sincronice con la versión anterior y confírmelo. Esto debería funcionar.
Aquí también hay una explicación de deshacer cambios.
fuente
La respuesta de Jon Skeet es prácticamente la solución en pocas palabras, sin embargo, si eres como yo, es posible que quieras una explicación. El manual de Subversion llama a esto un
Cherry-Pick Merge
De las páginas del manual.
Ejemplo:
Esto reemplazará la copia local [2983] (que, de acuerdo con la cita anterior, debe estar sincronizada con el servidor, es su responsabilidad) con la revisión 289 del servidor. El cambio ocurre localmente, lo que significa que si tiene un pago limpio, entonces los cambios se pueden inspeccionar antes de confirmarlos.
fuente
Lo siguiente me ha funcionado.
Tuve muchos cambios locales y necesitaba descartarlos en la copia local y verificar la última versión estable en SVN.
Verifique el estado de todos los archivos, incluidos los archivos ignorados.
Grep todas las líneas para obtener los archivos recién agregados e ignorados.
Reemplace esos con
//
.y rm -rf todas las líneas.
svn status --no-ignore | grep '^ [? I]' | sed "s / ^ [? I] //" | xargs -I {} rm -rf "{}"
fuente