Differences between revisions 14 and 15
Revision 14 as of 2009-05-19 19:30:58
Size: 3892
Editor: localhost
Comment: converted to 1.6 markup
Revision 15 as of 2009-08-08 19:50:48
Size: 4780
Editor: youshe
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#language fr # language fr
Line 3: Line 3:
## 2009-08-08 Frédéric Bouquet (youshe) <youshe.jaalon@gmail.com> - Mise à jour
Line 4: Line 5:
= Tutorial - Fusionner les changements conflictuels = Cette page est une traduction de l'original en anglais [[TutorialConflict]]
Line 6: Line 7:
Nous avons appris à nous occuper de fusions simples, dans le [[FrenchTutorialMerge]]. == Tutorial - Fusionner les changements conflictuels ==
Line 8: Line 9:
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). ''(Cette page est la partie 8 sur 9 de la série [[FrenchTutorial]]. La partie précédente est [[FrenchTutorialMerge]], la suivante [[FrenchTutorialConclusion]])''
Line 10: Line 11:
Nous devons créer une situation de conflit artificielle. Commençons par faire un clone de my-hello. 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
[[ResolveConflict|résoudre (resolving)]].

Nous devons d'abord créer une situation de conflit artificielle. Commençons par
faire un [[Clone|clone]] de {{{mon-hello}}}.
Line 14: Line 25:
$ hg clone my-hello my-hello-not-cvs $ hg clone mon-hello my-hello-not-cvs
updating working directory
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Line 16: Line 29:
Maintenant ajoutons une ligne de sortie à hello.c:
Maintenant ajoutons une ligne de sortie à {{{hello.c}}} :
Line 20: Line 34:
$ vi hello.c
Line 21: Line 36:
Nous changerons main() pour obtenir ceci:
Line 23: Line 37:
{{{ Nous changerons {{{main}}} pour obtenir ceci :

{{{#!cplusplus numbers=off
Line 27: Line 43:
        printf("Certain que je suis sûr de ne pas avoir a utiliser CVS!\n");         printf("sure am glad I'm not using CVS!\n");
Line 32: Line 48:
Et soumettons les changements: Et [[Commit|soumettons]] les changements :
Line 35: Line 51:
$ hg commit -m'un autre commentaire' $ hg commit -m "Give thanks for dodging bullet"
Line 38: Line 54:
Souvenez-vous que dans le [[FrenchTutorialFirstChange]] 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 ? 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|pull]] depuis ce change
ment ici ?
Line 48: Line 67:
(run 'hg update' to get a working copy) (run 'hg heads' to see heads, 'hg merge' to merge)
Line 51: Line 70:
Jusqu'ici, tout va bien. Essayons une mise à jour (update) Jusqu'ici, tout va bien. Essayons une [[Update|mise à jour (update)]].
Line 54: Line 73:
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)
$ hg update
abort: crosses branches (use 'hg merge' or 'hg update -C')
Line 60: Line 77:
Comme dans le [[FrenchTutorialMerge]], nous devons lancer update -m. Mais c'est ici que les choses changent. Mercurial ne peut pas 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). 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 [[Commit|commiter]], et
celui que nous venons juste de récupérer (pull)).
Line 63: Line 84:
$ hg update -m $ hg merge
Line 65: Line 86:
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.
Line 67: Line 87:
Note: la commande hg merge existe désormais également. Elle a le même effet que update -m. 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 :
Line 69: Line 91:
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. {{{
/*
 * 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.
 */
Line 71: Line 101:
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 !
#include <stdio.h>
Line 75: Line 103:
Complément sur les logiciels de "fusion":
kdiff3 est excellent: il s'occupera de fusionner ce qui peut l'être, et laissera des marques de confits aux endroits ou une action de l'utilisateur est requise.
meld est aussi assez efficace, et mieux intégré à Gnome.
Mais quelque soit le logiciel que vous utilisez, la démarche est la suivante:
 - résoudre le conflit à l'aide des marqueurs
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;
}
}}}
Line 81: Line 115:
 - enregistrer depuis le logiciel
Line 83: Line 116:
 - quitter. 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 :
Line 85: Line 120:
Mercurial relancera le programme si d'autres conflits apparaissent. {{{
$ hg status
M hello.c
? hello.c.orig
}}}
Line 87: Line 126:
Maintenant passons à la [[FrenchTutorialConclusion]] 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]].
Line 89: Line 156:
CategoryFrench CategoryTutorial CategoryFrench

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 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 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 :

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 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 <stdio.h>

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

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