SVN - Corregir errores

Suponga que Jerry modifica accidentalmente el archivo array.cy obtiene errores de compilación. Ahora quiere deshacerse de los cambios. En esta situación, la operación 'revertir' ayudará. La operación de reversión deshará cualquier cambio local en un archivo o directorio y resolverá cualquier estado en conflicto.

[[email protected] trunk]$ svn status

El comando anterior producirá el siguiente resultado.

M       array.c

Intentemos hacer una matriz de la siguiente manera:

[[email protected] trunk]$ make array

El comando anterior producirá el siguiente resultado.

cc     array.c   -o array
array.c: In function ‘main’:
array.c:26: error: ‘n’ undeclared (first use in this function)
array.c:26: error: (Each undeclared identifier is reported only once
array.c:26: error: for each function it appears in.)
array.c:34: error: ‘arr’ undeclared (first use in this function)
make: *** [array] Error 1

Jerry realiza la operación 'revertir' en el archivo array.c .

[[email protected] trunk]$ svn revert array.c 
Reverted 'array.c'

[[email protected] trunk]$ svn status
[[email protected] trunk]$

Ahora compila el código.

[[email protected] trunk]$ make array
cc     array.c   -o array

Después de la operación de reversión, su copia de trabajo vuelve a su estado original. La operación de reversión puede revertir un solo archivo, así como un directorio completo. Para revertir un directorio, use la opción -R como se muestra a continuación.

[[email protected] project_repo]$ pwd
/home/jerry/project_repo

[[email protected] project_repo]$ svn revert -R trunk

Hasta ahora, hemos visto cómo revertir los cambios que se han realizado en la copia de trabajo. Pero, ¿qué sucede si desea revertir una revisión comprometida? La herramienta Version Control System no permite eliminar el historial del repositorio. Solo podemos agregar historia. Ocurrirá incluso si elimina archivos del repositorio. Para deshacer una revisión anterior, tenemos que revertir los cambios que se hicieron en la revisión anterior y luego confirmar una nueva revisión. Esto se llama fusión inversa.

Supongamos que Jerry agrega un código para la operación de búsqueda lineal. Después de la verificación, confirma sus cambios.

[[email protected] trunk]$ svn diff
Index: array.c
===================================================================
--- array.c   (revision 21)
+++ array.c   (working copy)
@@ -2,6 +2,16 @@
 
 #define MAX 16
 
+int linear_search(int *arr, int n, int key)
+{
+   int i;
+
+   for (i = 0; i < n; ++i)
+      if (arr[i] == key)
+         return i;
+   return -1;
+}
+
 void bubble_sort(int *arr, int n)
 {
    int i, j, temp, flag = 1;

[[email protected] trunk]$ svn status
?       array
M       array.c

[[email protected] trunk]$ svn commit -m "Added code for linear search"
Sending        trunk/array.c
Transmitting file data .
Committed revision 22.

Jerry siente curiosidad por lo que está haciendo Tom. Entonces revisa los mensajes de registro de Subversion.

[[email protected] trunk]$ svn log

El comando anterior producirá el siguiente resultado.

------------------------------------------------------------------------
r5 | tom   | 2013-08-24 17:15:28 +0530 (Sat, 24 Aug 2013) | 1 line

Add binary search operation
------------------------------------------------------------------------
r4 | jerry | 2013-08-18 20:43:25 +0530 (Sun, 18 Aug 2013) | 1 line

Add function to accept input and to display array contents

Después de ver los mensajes de registro, Jerry se da cuenta de que cometió un grave error. Porque Tom ya implementó la operación de búsqueda binaria, que es mejor que la búsqueda lineal; su código es redundante y ahora Jerry tiene que revertir sus cambios a la revisión anterior. Entonces, primero busque la revisión actual del repositorio. Actualmente, el repositorio está en la revisión 22 y tenemos que revertirlo a la revisión anterior, es decir, la revisión 21.

[[email protected] trunk]$ svn up 
At revision 22.

[[email protected] trunk]$ svn merge -r 22:21 array.c 
--- Reverse-merging r22 into 'array.c':
U    array.c

[[email protected] trunk]$ svn commit -m "Reverted to revision 21"
Sending        trunk/array.c
Transmitting file data .
Committed revision 23.