Tutorial - Fusionner les changements conflictueux =

Nous avons appris à nous occuper de fusions simples, dans le ["TutorialMergeFr"].

Mercurial sait traiter des cas plus complexes de fusion également. Il n'est pas rare que deux personnes éditent exactement la même ligne d'un fichier, et ils doivent alors décider ce qu'il faut faire. On appelle ces cas conflits; et trouver quoi faire avec signifie le résoudre (resolving).

Nous devons créer une situation de conflit artificielle. Commençons par faire un clone de my-hello.

 $ cd ..
  $ hg clone my-hello my-hello-not-cvs

Maintenant ajoutons une ligne de sortie à hello.c:

 $ cd my-hello-not-cvs

Nous changerons main() pour obtenir ceci:

 #include <stdio.h>
                                                                                  
  int main(void) {
          printf (STANDART_GREETINGS);
          printf ("\n");
          printf ("Certain que je suis sûr de ne pas avoir a utiliser CVS!\n");
  }

Et soumettons les changements:

 $ hg commit -t'Give thanks for dodging bullet'

Souvenez-vous que dans le tutorial des premiers changements nous avions créé un ChangeSet dans my-hello-new-output qui ajoutait également une ligne de sortie à la même place. Que se passe-t-il si on essaie de faire un pull depuis ce changement ici ?

 $ hg pull ../my-hello-pulling from ../my-hello-new-output/
  searching for changes
  adding changesets
  adding manifests
  adding file revisions
  modified 1 files, added 1 changesets and 1 new revisions
  (run 'hg update' to get a working copy)

Jusqu'ici, tout va bien. Essayons une mise à jour (update)

 $ hg update
  this update spans a branch affecting the following files:
   hello.c (resolve)
  aborting update spanning branches!
  (use update -m to perform a branch merge)

Comme dans le ["TutorialMergeFr"], nous devons lancer update -m. Mais c'est ici que les choses changent. Mercurial ne peut pas maintenant simplement fusionner les changements, puisque la même ligne des deux fichiers a été modifiée d'une façon différente par chaque Changeset (celui que nous venons de soumettre, et celui que nous venons d'ajouter avec pull).

 $ hg update -m

Ici, ce qui se passe peut être une question de chance. Si nous en avons, et que nous avons un programme de fusion (merging program) installé, il sera lancé. De là on sera capable de remarquer les conflits entre les deux changements et de décider comment les résoudre.

Si nous n'avons pas de chance et que nous n'avons pas de programme de fusion installé, nous nous retrouverons dans notre éditeur de texte, qui visitera le fichier que nous devons fusionner. Le faire à la main est synonyme de fortes chances d'erreur et est également pénible. Il est préférable de quitter l'éditeur de texte, d'installer un programme de fusion, puis d'utiliser hg undo pour retirer les changements du pull. Ensuite, refaire le pull et essayer à nouveau.

Note:

Maintenant passons à la ["ConclusionTutorialMercurial"]