# language fr ## page was renamed from TutorialGestionConflits ## 2009-08-08 Frédéric Bouquet (youshe) - Mise à jour Cette page est une traduction de l'original en anglais [[TutorialConflict]] == Tutorial - Fusionner les changements conflictuels == ''(Cette page est la partie 8 sur 9 de la série [[FrenchTutorial]]. La partie précédente est [[FrenchTutorialMerge]], la suivante [[FrenchTutorialConclusion]])'' Nous avons appris à nous occuper de [[Merge|fusions]] simples, dans le [[FrenchTutorialMerge]]. Mercurial sait également traiter des cas plus complexes de fusion. Il n'est pas rare que deux personnes éditent exactement la même ligne d'un fichier, et doivent alors décider ce qu'il faut faire. On appelle ces cas [[Conflict|conflits]]. Trouver quoi faire avec est appelé le résoudre (resolving). Nous devons d'abord créer une situation de conflit artificielle. Commençons par faire un clone de {{{mon-hello}}}. {{{ $ cd .. $ hg clone mon-hello my-hello-not-cvs updating working directory 2 files updated, 0 files merged, 0 files removed, 0 files unresolved }}} Maintenant ajoutons une ligne de sortie à {{{hello.c}}} : {{{ $ cd my-hello-not-cvs $ vi hello.c }}} Nous changerons {{{main}}} pour obtenir ceci : {{{#!cplusplus numbers=off int main(int argc, char **argv) { printf("hello, world!\n"); printf("sure am glad I'm not using CVS!\n"); return 0; } }}} Et soumettons les changements : {{{ $ hg commit -m "Give thanks for dodging bullet" }}} Souvenez-vous que dans le [[FrenchTutorialFirstChange]], nous avions créé un [[ChangeSet]] dans {{{my-hello-new-output}}} qui ajoutait ''également'' une seconde ligne de sortie. Que se passe-t-il si on essaie de faire un pull depuis ce changement ici ? {{{ $ hg pull ../my-hello-new-output pulling from ../my-hello-new-output searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) }}} Jusqu'ici, tout va bien. Essayons une [[Update|mise à jour (update)]]. {{{ $ hg update abort: crosses branches (use 'hg merge' or 'hg update -C') }}} Comme dans le [[FrenchTutorialMerge]], nous devons lancer {{{hg merge}}}. Cependant, Mercurial ne va pas être capable de fusionner automatiquement étant donné que la même ligne du même fichier source a été modifié différemment dans chaque !ChangeSet (celui que nous venons juste de commiter, et celui que nous venons juste de récupérer (pull)). {{{ $ hg merge }}} A ce point, ce qui se passe dépend de comment Mercurial est configuré (cf. [[MergeToolConfiguration]]). Par défaut, Mercurial insère un ensemble de marqueurs dans les fichiers à fusionner de votre copie de travail : {{{ /* * hello.c * * Placed in the public domain by Bryan O'Sullivan * * This program is not covered by patents in the United States or other * countries. */ #include int main(int argc, char **argv) { printf("hello, world!\n"); <<<<<<< local printf("sure am glad I'm not using CVS!\n"); ======= printf("sure am glad I'm using Mercurial!\n"); >>>>>>> other return 0; } }}} Vous pouvez trouver ces fichiers en utilisant la commande `hg status`, comme précédemment, notez que Mercurial a sauvegardé une copie du fichier original avant d'insérer les marqueurs de conflits : {{{ $ hg status M hello.c ? hello.c.orig }}} Pour résoudre un conflit, nous ouvrons `hello.c` dans un éditeur, supprimons les marqueurs de conflits et gardons la ligne "sure am glad I'm using Mercurial!\n", supprimant la ligne à propos de CVS. Nous pouvons ensuite sauver et fermer l'éditeur Ensuite, nous informons Mercurial que nous avons résolu le conflit en utilisant la commande {{{hg resolve}}} : {{{ $ hg resolve -m hello.c }}} Mercurial accepte la résolution sans aucune sortie. Comme précédemment, pensez à commiter ces changements au dépôt une fois que la fusion est complète : {{{ $ hg commit -m "Merged changes from my-hello-new-output" }}} Ce que nous avons vu ici est le comportement par défaut de Mercurial. Vous pouvez, si vous le voulez, configurer Mercurial pour ouvrir l'éditeur automatiquement. Mercurial peut aussi être configuré pour appeler un outil externe de fusion en trois étapes. Des informations sur ces deux procédés peuvent être trouvées dans [[MergeToolConfiguration]]. Finissons maintenant avec [[FrenchTutorialConclusion]]. ---- CategoryTutorial CategoryFrench