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.

[jerry@CentOS trunk]$ svn status

Il comando sopra produrrà il seguente risultato.

M       array.c

Proviamo a creare array come segue:

[jerry@CentOS 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 .

[jerry@CentOS trunk]$ svn revert array.c 
Reverted 'array.c'

[jerry@CentOS trunk]$ svn status
[jerry@CentOS trunk]$

Ora compila il codice.

[jerry@CentOS 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.

[jerry@CentOS project_repo]$ pwd
/home/jerry/project_repo

[jerry@CentOS 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.

[jerry@CentOS 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;

[jerry@CentOS trunk]$ svn status
?       array
M       array.c

[jerry@CentOS 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.

[jerry@CentOS 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.

[jerry@CentOS trunk]$ svn up 
At revision 22.

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

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