SVN - Corriger les erreurs

Supposons que Jerry modifie accidentellement le fichier array.c et qu'il obtienne des erreurs de compilation. Maintenant, il veut abandonner les changements. Dans cette situation, l'opération «Revert» vous aidera. L'opération de restauration annulera toutes les modifications locales d'un fichier ou d'un répertoire et résoudra tout état de conflit.

[[email protected] trunk]$ svn status

La commande ci-dessus produira le résultat suivant.

M       array.c

Essayons de créer un tableau comme suit:

[[email protected] trunk]$ make array

La commande ci-dessus produira le résultat suivant.

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 effectue une opération de «retour» sur le fichier array.c .

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

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

Maintenant compilez le code.

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

Après l'opération de restauration, sa copie de travail revient à son état d'origine. L'opération de restauration peut restaurer un seul fichier ainsi qu'un répertoire complet. Pour rétablir un répertoire, utilisez l'option -R comme indiqué ci-dessous.

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

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

Jusqu'à présent, nous avons vu comment annuler les modifications apportées à la copie de travail. Mais que faire si vous souhaitez annuler une révision validée! L'outil du système de contrôle de version ne permet pas de supprimer l'historique du référentiel. Nous ne pouvons ajouter que l'histoire. Cela se produira même si vous supprimez des fichiers du référentiel. Pour annuler une ancienne révision, nous devons annuler les modifications apportées à l'ancienne révision, puis valider une nouvelle révision. C'est ce qu'on appelle une fusion inversée.

Supposons que Jerry ajoute un code pour l'opération de recherche linéaire. Après vérification, il valide ses modifications.

[[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 est curieux de savoir ce que fait Tom. Il vérifie donc les messages du journal Subversion.

[[email protected] trunk]$ svn log

La commande ci-dessus produira le résultat suivant.

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

Après avoir consulté les messages du journal, Jerry se rend compte qu'il a commis une grave erreur. Parce que Tom a déjà implémenté une opération de recherche binaire, qui est meilleure que la recherche linéaire; son code est redondant, et maintenant Jerry doit revenir ses modifications à la révision précédente. Alors, recherchez d'abord la révision actuelle du référentiel. Actuellement, le référentiel est à la révision 22 et nous devons le retourner à la révision précédente, c'est-à-dire la révision 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.