2009-03-20 5 views
5

Hice algunos cambios y los comprometí (a la versión 2), y descubrí que introdujeron nuevos errores en mi programa algunos minutos después. Así que cambié a algunos de los archivos a una versión anterior para recuperar algunos de los archivos a la versión 1 en mi plataforma local. Desde entonces he realizado muchos cambios que no quiero perder, y he utilizado commit (versión 3) para obtener mis cambios locales en el servidor.Cómo forzar su versión local como la más reciente en SVN

La versión que tengo localmente es exactamente lo que quiero que esté en el repositorio como revisión de encabezado, aunque algunos de los archivos todavía están oficialmente en la "versión 1". Supongo que debería usar la fusión de SVN de alguna manera, pero no estoy seguro de cómo hacerlo. ¿Algún consejo?

editar: Cuando uso diff, muestra cambios de la versión local a la versión rep. Podría actualizar, pero luego volvería a tener una versión no operativa localmente. Entonces, lo que quiero es algún tipo de compromiso forzado, que simplemente diga "esta es la última versión, punto".

edit2: Al hacer "commit", SVN informa que no hay cambios. Gracias a Neil Butterworth por la pregunta.

edit3: Lo que finalmente hice, FYI: Debería haber usado la sugerencia de Tim, pero fui lo suficientemente tonto como para hacer una actualización sin pensar realmente en lo que estaba haciendo. Por supuesto, todo estaba realmente en mal estado sin posibilidad de reparación. Entonces, lo que finalmente hice fue exportar el proyecto a un nuevo directorio. Obviamente no es la forma en que deberías hacerlo, pero no quería meterme con esto más. Al final tuve que volver a hacer un progreso real en el proyecto real ;-) Sé que no puedo hacer cosas así cuando estoy trabajando en un equipo más grande, pero no estoy :)

+0

¿Qué sucede cuando compromete sus cambios? –

+0

Dice: sin cambios. buena pregunta – panschk

Respuesta

9

Manera de fuerza bruta:

  1. Haga una copia de sus archivos locales.
  2. Elimine todos los archivos .svn en todos los directorios
  3. Compruebe la versión HEAD.
  4. Copie sus archivos locales en el HEAD desprotegido.
  5. Revise sus archivos locales en el repositorio.

Si lo hizo correctamente, el cliente SVN debe interpretar los archivos modificados como actualizaciones en el repositorio. Sin embargo, esto sobrescribirá cualquier cambio que otras personas hayan realizado y que desee conservar. Si desea mantener esos cambios, haga una diferencia en todos los archivos primero e incorpore todos los cambios recientes, antes de realizar el compromiso final.

inversa fusionar hasta la revisión inicial:

  • Para cada archivo cambiado,
    1. comparar los cambios diff, nota que desea conservar, y cambiar su copia local en consecuencia.
    2. Haga una copia de sus archivos locales.
    3. Reverse merge HEAD volver a la versión original deseada.
    4. Pegue su copia de los archivos locales en la copia local combinada. (Borrar .SVN primero)
    5. Commit

Esto es probablemente más el manual a menos que acaba de revertir todo de nuevo sin comprobar si hay algún cambio.

Subversion, AFAIK, no tiene ninguna disposición para un comando borrado todavía, por lo que todos los cambios siempre suceden a la copia local de HEAD.

Revertir de nuevo es solo una combinación inversa, y todas las fusiones siempre ocurren en su copia local. En un sistema ideal, la fusión se rastreará, pero Subversion no rastrea la información de fusión, por lo que también podría hacer el método 1, y simplemente hacer un comentario en el registro de confirmación.

Algunas URL para buscar:

+0

Ese sería el plan B, si nada funciona. Pero sería bastante trabajo manual. Preferiría hacerlo de una manera más inteligente ;-) – panschk

+0

Sí, un poco molesto de realizar, pero siempre funciona. –

+0

No es realmente ese manual. Lo he hecho muchas veces antes. Asumiendo ventanas, selecciona todo, copia, pega en otro lugar. Buscar todos los .svn, eliminar. Actualizar a la cabeza. Copia la versión anterior y vuelve a pegar. Cometer. – Tim

3

Hay dos posibilidades:

  • se cambia de manera efectiva ed a una versión anterior del repositorio, por lo que trabajó sobre la versión 1;
  • O ha comprobado las versiones anteriores de los archivos en vez de la versión 2, los ha modificado y confirmado como una nueva versión.

En cualquier caso, si ha cometido los cambios correctamente, eso es lo que debería estar en el servidor.

Si no está seguro, sin embargo, me gustaría recomendar:

  • Mantener una copia de seguridad de los archivos actuales;
  • Echa un vistazo a una nueva copia del repositorio;
  • Si ve que es lo mismo que su copia, entonces nada más que hacer.
  • Si no es así, sobrescribir todos los archivos en la nueva copia de la copia de seguridad (excepto las carpetas ocultas Svn!)
+0

Esto realmente tiene más sentido para mí que la respuesta aceptada. He hecho esto algunas veces yo mismo. – WakeUpScreaming

2

Así que me pasa a algunos de los archivos a una versión más antigua de conseguir algunos de los archivos vuelven a la versión 1 en mi plataforma local .

En lugar de esto, debería haber revertido los cambios de la revisión en particular. Debería poder actualizar y revertir los cambios de esa revisión después de eso.

Cuestiones relacionadas