SVN Resolución de conflictos


Causa del conflicto de versiones:

Supongamos que los usuarios A y B actualizaron el archivo kingtuns.txt cuando el número de versión era 100. El usuario A, después de completar la modificación, envía kingtuns.txt al servidor. En este momento, la confirmación es exitosa, y el número de versión del archivo kingtuns.txt ya se ha convertido en 101. Mientras tanto, el usuario B realiza modificaciones en el archivo kingtuns.txt de la versión 100. Cuando envía al servidor después de completar las modificaciones, como no se basó en la versión 101 más reciente, la confirmación falla.

Ya hemos realizado el checkout del repositorio ejemplo01 localmente. A continuación, implementaremos el método para resolver conflictos de versión.

Encontramos que el archivo HelloWorld.html tiene errores. Necesitamos modificar el archivo y enviarlo al repositorio.

Cambiamos el contenido de HelloWorld.html a "HelloWorld! https://www.example.com/".

root@ejemplo:~/svn/ejemplo01/trunk# cat HelloWorld.html 
HelloWorld! http://www.example.com/

Use el siguiente comando para ver los cambios:

root@ejemplo:~/svn/ejemplo01/trunk# svn diff 
Index: HelloWorld.html
===================================================================
--- HelloWorld.html     (revision 5)
+++ HelloWorld.html     (working copy)
@@ -1,2 +1 @@
-HelloWorld! http://www.example.com/
+HelloWorld! http://www.example.com/!

Intente usar el siguiente comando para confirmar sus cambios:

root@ejemplo:~/svn/ejemplo01/trunk# svn commit -m "change HelloWorld.html first"
Sending        HelloWorld.html
Transmitting file data .svn: E160028: Commit failed (details follow):
svn: E160028: File '/trunk/HelloWorld.html' is out of date

En este momento, descubrí que la confirmación falló.

Porque en este momento, HelloWorld.html ya ha sido modificado y enviado al repositorio por user02. Subversion no permitirá que user01 (la cuenta svn utilizada en este ejemplo) confirme los cambios, porque user02 ya ha modificado el repositorio, por lo que nuestra copia de trabajo ya no es válida.

Para evitar que el código de las dos personas se sobrescriba mutuamente, Subversion no nos permite realizar esta operación. Por lo tanto, debemos actualizar la copia de trabajo antes de confirmar los cambios. Así que use el comando update, de la siguiente manera:

root@ejemplo:~/svn/ejemplo01/trunk# svn update
Updating '.':
C    HelloWorld.html
Updated to revision 6.
Conflict discovered in file 'HelloWorld.html'.
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
        (mc) my side of conflict, (tc) their side of conflict,
        (s) show all options: mc
Resolved conflicted state of 'HelloWorld.html'
Summary of conflicts:
  Text conflicts: 0 remaining (and 1 already resolved)

Aquí ingrese "mc" para usar principalmente el archivo local. También puede usar sus opciones para realizar diferentes operaciones en los archivos en conflicto.

Por defecto, se actualiza a la versión más reciente. También podemos especificar a qué versión actualizar.

svn update -r6

En este momento, la copia de trabajo está sincronizada con el repositorio, por lo que puede confirmar los cambios de manera segura.

root@ejemplo:~/svn/ejemplo01/trunk# svn commit -m "change HelloWorld.html second"
Sending        HelloWorld.html
Transmitting file data .
Committed revision 7.
Otras extensiones