Actualizar elemento a revisión frente a volver a revisión

161

Empecé a usar Subversion con TortoiseSVN. Si abro el registro y hago clic derecho en una revisión anterior, veo dos opciones que parecen retroceder a una versión anterior: "Actualizar elemento a revisión" y "Volver a esta revisión".

Entiendo que la actualización a una revisión anterior se usa cuando solo desea mirar hacia atrás a una versión anterior pero no cambiar realmente el repositorio. Revertir es cuando realmente arruinaste y quieres que la última revisión en el repositorio sea la misma que una versión anterior.

Entonces, supongamos que la revisión HEAD es 100 y vuelvo a 95. Invertirá la fusión de mi copia de trabajo a 95. Entonces, ¿puedo confirmar ese cambio en el repositorio que crearía la revisión 101 correcta? ¿Cómo es eso diferente si tuviera que actualizar a la revisión 95? ¿Todavía no revierte los cambios de las últimas revisiones? Estoy confundido acerca de cómo difiere el estado de mi copia de trabajo después de Revertir o Actualizar a una revisión anterior.

Eric Anastas
fuente

Respuestas:

205

Actualizar a revisión solo actualizará los archivos de su copia de trabajo a la revisión elegida. Pero no puede continuar trabajando en esta revisión, ya que SVN se quejará de que su copia de trabajo no está actualizada .

volver a esta revisión deshacerá todos los cambios en su copia de trabajo que se hicieron después de la revisión seleccionada (en su ejemplo rev. 96,97,98,99,100) Su copia de trabajo ahora está en estado modificado .

El contenido del archivo de ambos escenarios es el mismo, sin embargo, en el primer caso tiene una copia de trabajo no modificada y no puede confirmar sus cambios (ya que su copia de trabajo no apunta a HEAD rev 100) en el segundo caso tiene una copia de trabajo modificada apuntando a la cabeza y puedes seguir trabajando y comprometiéndote

Peter Parker
fuente
1
Bien, digamos que actualizo a revisión y mi copia de trabajo no tiene datos. Nada me impide cambiar los archivos. ¿Qué sucede si cambio uno de los archivos e intento confirmarlo? Supongo que subversion verá el conflicto y me obligará a fusionar la última versión del repositorio en mi copia de trabajo modificada antes de enviarla.
Eric Anastas el
55
Si intenta confirmar un elemento con una revisión BASE anterior a HEAD, obtendrá un "error de confirmación: su copia de trabajo probablemente no esté actualizada"
Peter Parker
¿Cómo update toy revert to/fromtratar los cambios locales (cambios no comprometidos)?
BaltoStar
Ambos métodos mantienen intactos los cambios locales, sin embargo, los cambios locales pueden causar conflictos en ambos casos y, en caso contrario, las modificaciones de la reversión se mezclan con los cambios locales de todos los demás usuarios. Así que al menos guarde un parche de sus modificaciones o comprométase con una rama.
Peter Parker el
31

Para comprender cómo el estado de su copia de trabajo es diferente en ambos escenarios, debe comprender el concepto de la revisión BASE :

BASE

El número de revisión de un elemento en una copia de trabajo. Si el artículo se ha modificado localmente, esto se refiere a la forma en que aparece sin esas modificaciones locales.

Su copia de trabajo contiene una instantánea de cada archivo (oculto en una carpeta .svn) en esta revisión BASE, lo que significa que era la última vez que se recuperó del repositorio . Esto explica por qué las copias de trabajo ocupan el doble de espacio y cómo es posible que pueda examinar e incluso revertir las modificaciones locales sin una conexión de red.

Actualizar elemento a Revisión cambia esta revisión base, haciendo que BASE esté desactualizado. Cuando intente confirmar modificaciones locales, SVN notará que su BASE no coincide con el HEAD del repositorio. La confirmación se rechazará hasta que realice una actualización (y posiblemente una combinación) para solucionar esto.

Volver a la revisión no cambia BASE. Conceptualmente es casi lo mismo que editar manualmente el archivo para que coincida con una revisión anterior.

Wim Coenen
fuente
De la respuesta aceptada "El contenido del archivo de ambos escenarios es el mismo". ¿Entonces, para qué molestarse? Esta respuesta explica la máxima diferencia y explica por qué "actualizar" frente a "revertir" provoca un comportamiento diferente al intentar comprometerse.
radarbob
¿Cómo update toy revert to/fromtratar los cambios locales (cambios no comprometidos)?
BaltoStar
5

Los archivos en su copia de trabajo pueden verse exactamente igual después, pero siguen siendo acciones muy diferentes: el repositorio está en un estado completamente diferente y tendrá diferentes opciones disponibles después de revertir que "actualizar" a una revisión anterior .

Brevemente, "actualizar a" solo afecta su copia de trabajo, pero "fusionar y confirmar inversamente" afectará el repositorio.

Si "actualiza" a una revisión anterior, el repositorio no ha cambiado: en su ejemplo, la revisión HEAD sigue siendo 100. No tiene que confirmar nada, ya que solo está jugando con su copia de trabajo. Si realiza modificaciones en su copia de trabajo e intenta confirmar, se le informará que su copia de trabajo está desactualizada y deberá actualizar antes de poder confirmar. Si alguien más que trabaja en el mismo repositorio realiza una "actualización", o si extrae una segunda copia de trabajo, será r100.

Sin embargo, si "invierte la fusión" en una revisión anterior, su copia de trabajo todavía se basa en el HEAD (suponiendo que esté actualizado), pero está creando una nueva revisión para reemplazar los cambios no deseados. Debe confirmar estos cambios, ya que está cambiando el repositorio. Una vez hecho esto, cualquier actualización o nueva copia de trabajo basada en HEAD mostrará r101, con los contenidos que acaba de confirmar.

Zac Thompson
fuente
5

Actualice su copia de trabajo a la revisión seleccionada. Es útil si desea que su copia de trabajo refleje un momento en el pasado, o si ha habido más confirmaciones en el repositorio y desea actualizar su copia de trabajo paso a paso. Es mejor actualizar un directorio completo en su copia de trabajo, no solo un archivo, de lo contrario su copia de trabajo podría ser inconsistente. Esto se utiliza para probar un propósito específico de revoluciones, si la prueba se ha hecho, se puede utilizar este comando para probar otra vuelta o usar SVN actualización para obtener CABEZA

Si desea deshacer un cambio anterior de forma permanente, use Revertir a esta revisión en su lugar.

- del documento de ayuda de TSVN

Si actualiza su copia de trabajo a una versión anterior, esto solo afectará su propia copia de trabajo, después de hacer algún cambio y desea confirmar, fallará, TSVN lo alertará para actualizar su WC a la última revisión primero Si revierte a una rev, puede comprometerse con el repositorio. Todos volverán a la rev después de hacer una actualización.

prime23
fuente
2

El texto de la referencia de Tortuga:

Actualizar elemento a revisión Actualice su copia de trabajo a la revisión seleccionada. Es útil si desea que su copia de trabajo refleje un momento en el pasado, o si ha habido más confirmaciones en el repositorio y desea actualizar su copia de trabajo paso a paso. Es mejor actualizar un directorio completo en su copia de trabajo, no solo un archivo, de lo contrario su copia de trabajo podría ser inconsistente.

Si desea deshacer un cambio anterior de forma permanente, use Revertir a esta revisión en su lugar.

Volver a esta revisión Volver a una revisión anterior. Si ha realizado varios cambios y luego decide que realmente desea volver a cómo estaban las cosas en la revisión N, este es el comando que necesita. Los cambios se deshacen en su copia de trabajo para que esta operación no afecte al repositorio hasta que los confirme. Tenga en cuenta que esto deshacerá todos los cambios realizados después de la revisión seleccionada, reemplazando el archivo / carpeta con la versión anterior.

Si su copia de trabajo está en un estado no modificado, después de realizar esta acción, su copia de trabajo se mostrará como modificada. Si ya tiene cambios locales, este comando combinará los cambios de deshacer en su copia de trabajo.

Lo que sucede internamente es que Subversion realiza una fusión inversa de todos los cambios realizados después de la revisión seleccionada, deshaciendo el efecto de esas confirmaciones anteriores.

Si después de realizar esta acción decide que desea deshacer la operación de deshacer y recuperar su copia de trabajo a su estado no modificado anterior, debe usar TortoiseSVN → Revertir desde el Explorador de Windows, que descartará las modificaciones locales realizadas por esta acción de fusión inversa.

Si simplemente desea ver cómo se veía un archivo o carpeta en una revisión anterior, use Actualizar a revisión o Guardar revisión como ... en su lugar.

Liker777
fuente