Size: 3335
Comment:
|
Size: 3318
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 11: | Line 11: |
$ hg clone my-hello my-hello-not-cvs | $ hg clone my-hello my-hello-not-cvs |
Line 24: | Line 24: |
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(void) { printf (STANDART_GREETINGS); printf ("\n"); printf ("Certain que je suis sûr de ne pas avoir a utiliser CVS!\n"); } |
Line 43: | Line 43: |
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) |
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) |
Line 55: | Line 55: |
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 perform a branch merge) |
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:
- 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"]