SVN - Résoudre les conflits

Tom décide d'ajouter un fichier README pour leur projet. Il crée donc le fichier README et y ajoute la liste TODO. Après avoir ajouté cela, le référentiel de fichiers est à la révision 6.

[[email protected] trunk]$ cat README 
/* TODO: Add contents in README file */

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

[[email protected] trunk]$ svn add README 
A         README

[[email protected] trunk]$ svn commit -m "Added README file. Will update it's content in future."
Adding         trunk/README
Transmitting file data .
Committed revision 6.

Jerry vérifie le dernier code qui est à la révision 6. Et immédiatement il commence à travailler. Après quelques heures, Tom met à jour le fichier README et valide ses modifications. Le README modifié ressemblera à ceci.

[[email protected] trunk]$ cat README 
* Supported operations:

1) Accept input
2) Display array elements

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

[[email protected] trunk]$ svn commit -m "Added supported operation in README"
Sending        trunk/README
Transmitting file data .
Committed revision 7.

Maintenant, le référentiel est à la révision 7 et la copie de travail de Jerry est obsolète. Jerry met également à jour le fichier README et essaie de valider ses modifications.

Le fichier README de Jerry ressemble à ceci.

[[email protected] trunk]$ cat README 
* File list

1) array.c	Implementation of array operation.
2) README	Instructions for user.

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

[[email protected] trunk]$ svn commit -m "Updated README"
Sending        trunk/README
svn: Commit failed (details follow):
svn: File or directory 'README' is out of date; try updating
svn: resource out of date; try updating

Étape 1: Afficher les conflits

Subversion a détecté que le fichier README a changé depuis la dernière mise à jour. Donc, Jerry doit mettre à jour sa copie de travail.

[[email protected] trunk]$ svn up
Conflict discovered in 'README'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:

Subversion se plaint qu'il y a un conflit avec le fichier README, et Subversion ne sait pas comment résoudre ce problème. Alors Jerry choisit la df possibilité d'examiner le conflit.

[[email protected] trunk]$ svn up
Conflict discovered in 'README'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: df
--- .svn/text-base/README.svn-base	Sat Aug 24 18:07:13 2013
+++ .svn/tmp/README.tmp	Sat Aug 24 18:13:03 2013
@@ -1 +1,11 @@
-/* TODO: Add contents in README file */
+<<<<<<< .mine
+* File list
+
+1) array.c	Implementation of array operation.
+2) README	Instructions for user.
+=======
+* Supported operations:
+
+1) Accept input
+2) Display array elements
+>>>>>>> .r7
Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:

Étape 2: reporter les conflits

Ensuite, Jerry choisit les options de report (p) , afin de pouvoir résoudre le conflit.

Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: p
C    README
Updated to revision 7.
Summary of conflicts:
  Text conflicts: 1

Après avoir ouvert le README dans l'éditeur de texte, il se rend compte que Subversion a inclus le code de Tom et son code avec des marqueurs de conflit.

[[email protected] trunk]$ cat README
<<<<<<< .min
* File list

1) array.c	Implementation of array operation.
2) README	Instructions for user.
=======
* Supported operations:

1) Accept input
2) Display array elements
>>>>>>> .r7

Jerry veut les changements de Tom aussi bien que les siens, alors il supprime simplement les lignes contenant les marqueurs de conflit.

Ainsi, le README modifié ressemblera à ceci.

[[email protected] trunk]$ cat README
* File list

1) array.c	Implementation of array operation.
2) README	Instructions for user.

* Supported operations:

1) Accept input
2) Display array elements

Jerry a résolu le conflit et il réessaye de commettre.

[[email protected] trunk]$ svn commit -m "Updated README"
svn: Commit failed (details follow):
svn: Aborting commit: '/home/jerry/project_repo/trunk/README' remains in conflict
 
[[email protected] trunk]$ svn status
?       README.r6
?       README.r7
?       README.mine
C       README

Étape 3: résoudre les conflits

Dans le commit ci-dessus, la lettre Cindique qu'il y a un conflit dans le fichier README. Jerry a résolu le conflit mais n'a pas dit à Subversion qu'il avait résolu le conflit. Il utilise la commande de résolution pour informer Subversion de la résolution du conflit.

[[email protected] trunk]$ svn resolve --accept=working README
Resolved conflicted state of 'README'

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

[[email protected] trunk]$ svn commit -m "Updated README"
Sending        trunk/README
Transmitting file data .
Committed revision 8.