Differences between revisions 7 and 8
Revision 7 as of 2005-08-28 09:31:47
Size: 3200
Editor: mpm
Comment:
Revision 8 as of 2006-05-13 12:43:54
Size: 3198
Comment: s/conflictueux/conflictuels/
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Tutorial - Fusionner les changements conflictueux = = = Tutorial - Fusionner les changements conflictuels =

Tutorial - Fusionner les changements conflictuels

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:

int main(int argc, char **argv)
{
        printf("hello, world!\n");
        printf("Certain que je suis sûr de ne pas avoir a utiliser CVS!\n");
        return 0;
}

Et soumettons les changements:

$ hg commit -m'un autre commentaire'

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-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 update' to get a working copy)

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

this update spans a branch affecting the following files:
 hello.c (resolve)
aborting update spanning branches!
(use update -m to merge across branches or -C to lose changes)

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:

  • N'oubliez pas de faire un commit après le update -m !
  • Les fichiers à conflits sont conservés en sauvegarde comme fichier.orig : supprimez-les pour qu'ils ne soient pas versionnés !

Maintenant passons à la ["ConclusionTutorialMercurial"]

FrenchTutorialConflict (last edited 2012-11-11 19:55:33 by abuehl)