Differences between revisions 6 and 7
Revision 6 as of 2005-08-26 01:37:09
Size: 3302
Editor: waste
Comment:
Revision 7 as of 2005-08-28 09:31:47
Size: 3200
Editor: mpm
Comment:
Deletions are marked like this. Additions are marked like this.
Line 10: Line 10:
 $ cd ..
 $ hg clone my-hello my-hello-not-cvs
$ cd ..
$ hg clone my-hello my-hello-not-cvs
Line 16: Line 16:
 $ cd my-hello-not-cvs $ cd my-hello-not-cvs
Line 21: Line 21:
 #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");
 }
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;
}
Line 29: Line 28:
Line 32: Line 32:
 $ hg commit -t'Give thanks for dodging bullet' $ hg commit -m'un autre commentaire'
Line 34: Line 34:
Line 37: Line 38:
 $ 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)
$ 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)
Line 45: Line 47:
Line 48: Line 51:
 $ 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)
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)
Line 54: Line 56:
Line 57: Line 60:
 $ hg update -m $ hg update -m

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:

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)