SVN - Risolvi errori

Supponiamo che Jerry modifichi accidentalmente il file array.c e riceva degli errori di compilazione. Adesso vuole buttare via i cambiamenti. In questa situazione, l'operazione di "ripristino" aiuterà. L'operazione di ripristino annullerà qualsiasi modifica locale a un file o directory e risolverà eventuali stati in conflitto.

[[email protected] trunk]$ svn status

Il comando sopra produrrà il seguente risultato.

M       array.c

Proviamo a creare array come segue:

[[email protected] trunk]$ make array

Il comando sopra produrrà il seguente risultato.

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 esegue l'operazione di "ripristino" sul file array.c .

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

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

Ora compila il codice.

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

Dopo l'operazione di ripristino, la sua copia di lavoro torna allo stato originale. L'operazione di ripristino può ripristinare un singolo file così come una directory completa. Per ripristinare una directory, utilizzare l'opzione -R come mostrato di seguito.

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

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

Finora abbiamo visto come annullare le modifiche apportate alla copia di lavoro. Ma cosa succede se si desidera annullare una revisione impegnata! Lo strumento Version Control System non consente di eliminare la cronologia dal repository. Possiamo solo aggiungere la storia. Accadrà anche se elimini i file dal repository. Per annullare una vecchia revisione, dobbiamo annullare tutte le modifiche apportate nella vecchia revisione e quindi eseguire una nuova revisione. Questa è chiamata unione inversa.

Supponiamo che Jerry aggiunga un codice per l'operazione di ricerca lineare. Dopo la verifica, conferma le sue modifiche.

[[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 è curioso di sapere cosa sta facendo Tom. Quindi controlla i messaggi di registro di Subversion.

[[email protected] trunk]$ svn log

Il comando precedente produrrà il seguente risultato.

------------------------------------------------------------------------
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

Dopo aver visualizzato i messaggi di registro, Jerry si rende conto di aver commesso un grave errore. Perché Tom ha già implementato l'operazione di ricerca binaria, che è migliore della ricerca lineare; il suo codice è ridondante e ora Jerry deve ripristinare le sue modifiche alla revisione precedente. Quindi, prima trova la revisione corrente del repository. Attualmente, il repository è alla revisione 22 e dobbiamo ripristinarlo alla revisione precedente, cioè la revisione 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.