hgbook
annotate fr/ch03-tour-merge.xml @ 1114:527b86d55d4a
inotify: update installation information
inotify is shipped in Mercurial since 1.0, which greatly simplifies the installation process
inotify is shipped in Mercurial since 1.0, which greatly simplifies the installation process
author | Nicolas Dumazet <nicdumz.commits@gmail.com> |
---|---|
date | Sun Dec 13 16:35:56 2009 +0900 (2009-12-13) |
parents | c859c8d32838 |
children |
rev | line source |
---|---|
belaran@964 | 1 <!-- vim: set filetype=docbkxml shiftwidth=2 autoindent expandtab tw=77 : --> |
belaran@964 | 2 |
belaran@976 | 3 <chapter id="chap:tour-merge"> |
belaran@976 | 4 <?dbhtml filename="a-tour-of-mercurial-merging-work.html"?> |
wilk@1006 | 5 <title>Un tour rapide de Mercurial : fusionner les travaux</title> |
belaran@976 | 6 |
belaran@976 | 7 <para id="x_338">Nous avons maintenant étudié comment cloner un dépôt, effectuer |
belaran@976 | 8 des changements dedans, et récupérer ou transférer depuis un |
belaran@976 | 9 autre dépôt. La prochaine étape est donc de <emphasis>fusionner</emphasis> les |
belaran@976 | 10 modifications de différents dépôts.</para> |
belaran@976 | 11 |
belaran@976 | 12 <sect1> |
belaran@976 | 13 <title>Fusionner différents travaux</title> |
wilk@1006 | 14 <para id="x_339">La fusion est un aspect fondamental lorsqu'on |
wilk@1006 | 15 travaille avec un gestionnaire de révisions distribué.</para> |
belaran@976 | 16 |
belaran@976 | 17 <itemizedlist> |
belaran@995 | 18 <listitem> |
belaran@995 | 19 <para id="x_33a">Alice et Bob ont chacun une copie personnelle du dépôt d'un |
belaran@995 | 20 projet sur lequel ils collaborent. Alice corrige un bug |
belaran@995 | 21 dans son dépôt, et Bob ajoute une nouvelle fonctionnalité dans le |
belaran@995 | 22 sien. Ils veulent un dépôt partagé avec à la fois le correctif du |
belaran@995 | 23 bug et la nouvelle fonctionnalité.</para> |
belaran@995 | 24 </listitem> |
belaran@995 | 25 <listitem> |
belaran@995 | 26 <para id="x_33b">Je travaille régulièrement sur plusieurs tâches différentes sur |
belaran@995 | 27 un seul projet en même temps, chacun isolé dans son propre dépôt. |
belaran@995 | 28 Travailler ainsi signifie que je dois régulièrement fusionner une |
belaran@995 | 29 partie de mon code avec celui des autres.</para> |
belaran@995 | 30 </listitem> |
belaran@995 | 31 </itemizedlist> |
belaran@995 | 32 |
andre@1016 | 33 <para id="x_33c">Parce que nous devons fusionner souvent, |
andre@1016 | 34 Mercurial rend cette opération facile. Étudions ensemble le déroulement des |
belaran@995 | 35 opérations. Nous commencerons encore par faire un clone d'un autre |
belaran@995 | 36 dépôt (vous voyez que l'on fait ça tout le temps ?) puis nous ferons |
belaran@995 | 37 quelques modifications dessus.</para> |
belaran@995 | 38 |
belaran@995 | 39 &interaction.tour.merge.clone; |
belaran@995 | 40 |
belaran@995 | 41 <para id="x_33d">Nous devrions avoir maintenant deux copies de |
belaran@995 | 42 <filename>hello.c</filename> avec des contenus différents. Les |
belaran@995 | 43 historiques de ces deux dépôts ont aussi divergés, comme illustré dans |
belaran@995 | 44 la figure <xref linkend="fig:tour-merge:sep-repos"/>.</para> |
belaran@995 | 45 |
belaran@995 | 46 &interaction.tour.merge.cat1; |
belaran@995 | 47 |
wilk@1006 | 48 <para id="x_722">Et ici se trouve notre version légèrement différente du |
belaran@995 | 49 dépôt.</para> |
belaran@995 | 50 |
belaran@995 | 51 &interaction.tour.merge.cat2; |
belaran@995 | 52 |
belaran@995 | 53 <figure id="fig:tour-merge:sep-repos"> |
wilk@1006 | 54 <title>Historique divergeant des dépôts <filename |
belaran@995 | 55 class="directory">my-hello</filename> et <filename |
belaran@995 | 56 class="directory">my-new-hello</filename>.</title> |
belaran@995 | 57 <mediaobject> |
belaran@995 | 58 <imageobject><imagedata fileref="figs/tour-merge-sep-repos.png"/></imageobject> |
belaran@995 | 59 <textobject><phrase>XXX ajoute un test</phrase></textobject> |
belaran@995 | 60 </mediaobject> |
belaran@995 | 61 </figure> |
belaran@995 | 62 |
belaran@995 | 63 <para id="x_33f">Nous savons déjà que récupérer les modifications depuis |
belaran@995 | 64 notre dépôt <filename class="directory">my-hello</filename> n'aura |
belaran@995 | 65 aucun effet sur l'espace de travail.</para> |
belaran@995 | 66 |
belaran@995 | 67 &interaction.tour.merge.pull; |
belaran@995 | 68 |
belaran@995 | 69 <para id="x_340">Néanmoins, la commande <command role="hg-cmd">hg |
belaran@995 | 70 pull</command> nous indique quelque chose au sujet des |
belaran@995 | 71 <quote>heads</quote>.</para> |
belaran@995 | 72 |
belaran@995 | 73 <sect2> |
wilk@1006 | 74 <title>Les révisions <quote>heads</quote></title> |
belaran@995 | 75 |
andre@1016 | 76 <para id="x_341">Rappelez vous que Mercurial enregistre quelle révision |
belaran@995 | 77 est le parent de chaque révision. Si une révision a un parent, nous |
wilk@1006 | 78 l'appelons un enfant <quote>child</quote> ou un descendant de ce parent. Une |
wilk@1006 | 79 <quote>head</quote> est une révision qui n'a donc pas d'enfant. La révision <quote>tip</quote> |
wilk@1006 | 80 est donc une <quote>head</quote>, car c'est la révision la plus récente du dépôt |
belaran@995 | 81 qui n'a pas d'enfant. Il y a des moments où un dépôt peut contenir |
wilk@1006 | 82 plusieurs <quote>heads</quote>.</para> |
belaran@995 | 83 |
belaran@997 | 84 <figure id="fig:tour-merge:pull"> |
wilk@1006 | 85 <title>Contenu du dépôt après une récupération (pull) depuis le |
belaran@995 | 86 dépôt <filename |
belaran@995 | 87 class="directory">my-hello</filename> vers le dépôt <filename |
belaran@995 | 88 class="directory">my-new-hello</filename></title> |
belaran@995 | 89 <mediaobject> |
belaran@995 | 90 <imageobject> |
belaran@995 | 91 <imagedata fileref="tour-merge-pull"/> |
belaran@995 | 92 </imageobject> |
belaran@995 | 93 <textobject><phrase>XXX ajoute un texte</phrase></textobject> |
belaran@995 | 94 </mediaobject> |
belaran@995 | 95 </figure> |
belaran@995 | 96 |
belaran@995 | 97 <para id="x_343">Dans la figure <xref linkend="fig:tour-merge:pull"/>, |
wilk@1006 | 98 vous pouvez constater l'effet d'un <quote>pull</quote> depuis le dépôt |
belaran@995 | 99 <filename class="directory">my-hello</filename> dans le dépôt |
belaran@995 | 100 <filename class="directory">my-new-hello</filename>. L'historique qui |
belaran@995 | 101 était déjà présent dans le dépôt <filename |
belaran@995 | 102 class="directory">my-new-hello</filename> reste intact, mais une |
belaran@995 | 103 nouvelle révision a été ajoutée. En vous reportant à la figure <xref |
andre@1016 | 104 linkend="fig:tour-merge:sep-repos"/>, vous pouvez voir que l' |
wilk@1006 | 105 <emphasis>ID de révision <quote>changeset ID</quote></emphasis> reste le même dans |
belaran@995 | 106 le nouveau dépôt, mais que le <emphasis>numéro de |
belaran@995 | 107 révision</emphasis> reste le même. (Ceci est un parfait exemple de |
belaran@995 | 108 pourquoi il n'est fiable d'utiliser les numéros de révision lorsque |
wilk@1006 | 109 l'on discute d'un <quote>changeset</quote>.) Vous pouvez voir les <quote>heads</quote> |
belaran@995 | 110 présentes dans le dépôt en utilisant la commande <command |
belaran@995 | 111 role="hg-cmd">hg heads</command>.</para> |
belaran@995 | 112 |
belaran@995 | 113 &interaction.tour.merge.heads; |
belaran@995 | 114 </sect2> |
belaran@995 | 115 |
belaran@995 | 116 <sect2> |
belaran@995 | 117 <title>Effectuer la fusion</title> |
belaran@995 | 118 |
belaran@997 | 119 <para id="x_344">Que se passe-t-il quand vous essayez d'utiliser la |
belaran@995 | 120 commande <command role="hg-cmd">hg update</command> pour mettre à |
andre@1016 | 121 jour votre espace de travail au nouveau <quote>tip</quote> ?</para> |
belaran@995 | 122 |
belaran@995 | 123 &interaction.tour.merge.update; |
belaran@995 | 124 |
belaran@995 | 125 |
belaran@995 | 126 <para id="x_345">Mercurial nous prévient que la commande <command |
belaran@995 | 127 role="hg-cmd">hg update</command> n'effectuera pas |
belaran@995 | 128 la fusion, il ne veut pas mettre à jour l'espace de travail quand il |
belaran@995 | 129 estime que nous pourrions avoir besoin d'une fusion, à moins de lui |
belaran@995 | 130 forcer la main. À la place, il faut utiliser la commande <command |
belaran@995 | 131 role="hg-cmd">hg merge</command> pour fusionner les deux |
andre@1016 | 132 <quote>heads</quote>. |
andre@1016 | 133 <!--où se trouve la traduction de |
andre@1016 | 134 (Incidentally, forcing the update with <command>hg update |
andre@1016 | 135 -C</command> would revert any uncommitted changes in the |
andre@1016 | 136 working directory.)--> |
andre@1016 | 137 </para> |
wilk@1006 | 138 |
wilk@1006 | 139 <para id="x_723">Pour commencer une fusion (merge) entre deux <quote>heads</quote>, |
belaran@995 | 140 nous utilisons la commande <command role="hg-cmd">hg merge</command>.</para> |
belaran@995 | 141 |
belaran@995 | 142 &interaction.tour.merge.merge; |
belaran@995 | 143 |
belaran@995 | 144 <para id="x_347">Nous résolvons les conflits dans le fichier |
belaran@995 | 145 <filename>hello.c</filename>. Ceci met à jour le répertoire de travail |
andre@1016 | 146 de sorte qu'il ne contienne les modifications en provenance des |
wilk@1006 | 147 <emphasis>deux</emphasis> <quote>heads</quote>, ce qui est indiqué par la |
belaran@995 | 148 la sortie de la commande <command role="hg-cmd">hg |
belaran@995 | 149 parents</command> et le contenu du fichier |
belaran@995 | 150 <filename>hello.c</filename>.</para> |
belaran@995 | 151 |
belaran@995 | 152 &interaction.tour.merge.parents; |
belaran@995 | 153 </sect2> |
belaran@995 | 154 |
belaran@995 | 155 <sect2> |
belaran@995 | 156 <title>Effectuer l'ajout (commit) du résultat de la fusion</title> |
belaran@995 | 157 |
belaran@995 | 158 <para id="x_348">Dès l'instant où vous avez effectué une fusion |
belaran@995 | 159 (merge), <command role="hg-cmd">hg parents</command> vous |
belaran@995 | 160 affichera deux parents, avant que vous n'exécutiez la commande |
belaran@995 | 161 <command role="hg-cmd">hg commit</command> sur le résultat de la |
belaran@995 | 162 fusion.</para> |
belaran@995 | 163 |
belaran@995 | 164 &interaction.tour.merge.commit; |
belaran@995 | 165 |
andre@1016 | 166 <para id="x_349">Nous avons maintenant un nouveau tip, remarquez qu'il |
wilk@1006 | 167 contient <emphasis>à la fois</emphasis> nos anciennes <quote>heads</quote> et leurs |
belaran@995 | 168 parents. Ce sont les mêmes révisions que nous avions affichées avec |
belaran@995 | 169 la commande <command role="hg-cmd">hg parents</command>.</para> |
belaran@995 | 170 |
belaran@995 | 171 &interaction.tour.merge.tip; |
belaran@995 | 172 |
belaran@995 | 173 <para id="x_34a">Dans la figure <xref linkend="fig:tour-merge:merge"/>, |
belaran@995 | 174 vous pouvez voir une représentation de ce qui se passe dans l'espace |
belaran@995 | 175 de travail pendant la fusion, et comment ceci affecte le dépôt lors |
wilk@1006 | 176 du <quote>commit</quote>. Pendant la fusion, l'espace de travail, qui a deux |
belaran@995 | 177 révisions (changesets) comme parents, voit ces derniers devenir le parent |
belaran@995 | 178 d'une nouvelle révision (changeset).</para> |
belaran@995 | 179 |
belaran@995 | 180 <figure id="fig:tour-merge:merge"> |
wilk@1006 | 181 <title>Répertoire de travail et dépôt pendant une fusion, |
wilk@1006 | 182 et le <quote>commit</quote> qui suit</title> |
belaran@995 | 183 <mediaobject> |
belaran@995 | 184 <imageobject> |
belaran@995 | 185 <imagedata fileref="figs/tour-merge-merge.png"/> |
belaran@995 | 186 </imageobject> |
belaran@995 | 187 <textobject><phrase>XXX ajoute texte</phrase></textobject> |
belaran@995 | 188 </mediaobject> |
belaran@995 | 189 </figure> |
belaran@995 | 190 |
belaran@995 | 191 </sect2> |
belaran@995 | 192 </sect1> |
belaran@995 | 193 |
belaran@995 | 194 <sect1> |
belaran@995 | 195 <title>Fusionner les modifications en conflit</title> |
belaran@995 | 196 |
wilk@1006 | 197 <para id="x_34b">La plupart des fusions sont assez simples à réaliser, mais |
belaran@995 | 198 parfois vous vous retrouverez à fusionner des fichiers où la modification |
belaran@995 | 199 touche la même portion de code, au sein d'un même fichier. À moins |
belaran@995 | 200 que ces modification ne soient identiques, ceci aboutira à un |
belaran@995 | 201 <emphasis>conflit</emphasis>, et vous devrez décider comment réconcilier |
wilk@1006 | 202 les différentes modifications dans un ensemble cohérent.</para> |
belaran@995 | 203 |
belaran@997 | 204 <figure id="fig:tour-merge:conflict"> |
andre@1016 | 205 <title>Modifications en conflit dans un document</title> |
belaran@995 | 206 <mediaobject> |
belaran@995 | 207 <imageobject><imagedata fileref="tour-merge-conflict"/></imageobject> |
belaran@995 | 208 <textobject><phrase>XXX ajoute texte</phrase></textobject> |
belaran@995 | 209 </mediaobject> |
belaran@995 | 210 </figure> |
belaran@995 | 211 |
belaran@995 | 212 <para id="x_34d">La figure <xref linkend="fig:tour-merge:conflict"/> |
belaran@995 | 213 illustre un cas de modifications conflictuelles dans un document. Nous |
belaran@995 | 214 avons commencé avec une version simple de ce fichier, puis nous avons |
belaran@995 | 215 ajouté des modifications, pendant que quelqu'un d'autre modifiait le même |
belaran@995 | 216 texte. Notre tâche dans la résolution du conflit est de décider à quoi le |
belaran@995 | 217 fichier devrait ressembler.</para> |
belaran@995 | 218 |
belaran@995 | 219 <para id="x_34e">Mercurial n'a pas de mécanisme interne pour gérer |
belaran@995 | 220 les conflits. À la place, il exécute un programme externe appelé |
belaran@995 | 221 <command>hgmerge</command>. Il s'agit d'un script shell qui est |
wilk@1006 | 222 compris avec Mercurial, vous pouvez le modifier si vous voulez. |
belaran@995 | 223 Ce qu'il fait par défaut est d'essayer de trouver un des différents |
belaran@995 | 224 outils de fusion qui seront probablement installés sur le système. |
wilk@1006 | 225 Il commence par les outils totalement automatiques, et s'ils |
belaran@995 | 226 échouent (parce que la résolution du conflit nécessite une |
wilk@1006 | 227 intervention humaine) ou s'ils sont absents, le script tente |
belaran@995 | 228 d'exécuter certains outils graphiques de fusion.</para> |
belaran@995 | 229 |
belaran@995 | 230 <para id="x_34f">Il est aussi possible de demander à Mercurial d'exécuter |
belaran@995 | 231 un autre programme ou un autre script en définissant la variable |
belaran@995 | 232 d'environnement <envar>HGMERGE</envar> avec le nom |
belaran@995 | 233 du programme de votre choix.</para> |
belaran@995 | 234 |
belaran@995 | 235 <sect2> |
belaran@995 | 236 <title>Utiliser un outil graphique de fusion</title> |
belaran@995 | 237 |
belaran@995 | 238 <para id="x_350">Mon outil de fusion préféré est |
belaran@995 | 239 <command>kdiff3</command>, que j'utilise ici pour illustrer les |
belaran@995 | 240 fonctionnalités classiques des outils graphiques de fusion. Vous pouvez |
belaran@995 | 241 voir une capture d'écran de l'utilisation de <command>kdiff3</command> |
belaran@995 | 242 dans la figure <xref linkend="fig:tour-merge:kdiff3"/>. Cet outil |
wilk@1006 | 243 effectue une <emphasis>fusion <quote>three-way</quote></emphasis>, car il y a |
wilk@1006 | 244 trois différentes versions du fichier qui nous intéressent. Le fichier |
wilk@1006 | 245 découpe la partie supérieure de la fenêtre en trois panneaux :</para> |
belaran@995 | 246 <itemizedlist> |
wilk@1006 | 247 <listitem><para id="x_351">À gauche on trouve la version de |
belaran@995 | 248 <emphasis>base</emphasis> du fichier, soit la plus récente version |
belaran@995 | 249 des deux versions qu'on souhaite fusionner.</para></listitem> |
belaran@995 | 250 <listitem><para id="x_352">Au centre, il y a <quote>notre</quote> |
belaran@995 | 251 version du fichier, avec le contenu que nous avons modifié.</para></listitem> |
belaran@995 | 252 <listitem><para id="x_353">Sur la droite, on trouve |
belaran@995 | 253 <quote>leur</quote> version du fichier, celui qui contient la |
wilk@1006 | 254 révision que nous souhaitons intégrer.</para> |
belaran@995 | 255 </listitem></itemizedlist> |
belaran@995 | 256 <para id="x_354">Dans le panneau en dessous, on trouve le |
belaran@995 | 257 <emphasis>résultat</emphasis> actuel de notre fusion. Notre tâche |
andre@1016 | 258 consiste donc à remplacer tous les textes en rouge, |
belaran@995 | 259 qui indiquent des conflits non résolus, avec une fusion manuelle et |
belaran@995 | 260 pertinente de <quote>notre</quote> version et de la <quote>leur</quote>. |
belaran@995 | 261 </para> |
belaran@995 | 262 |
andre@1016 | 263 <para id="x_355">Les quatre panneaux sont <emphasis>accrochés ensemble</emphasis>, |
belaran@995 | 264 si nous déroulons les ascenseurs verticalement ou horizontalement dans chacun |
belaran@995 | 265 d'entre eux, les autres sont mis à jour avec la section correspondante dans leurs |
belaran@995 | 266 fichiers respectifs.</para> |
belaran@995 | 267 |
belaran@995 | 268 <figure id="fig:tour-merge:kdiff3"> |
belaran@995 | 269 <title>Utiliser <command>kdiff3</command> pour fusionner les |
belaran@995 | 270 différentes version d'un fichier.</title> |
belaran@995 | 271 <mediaobject> |
belaran@995 | 272 <imageobject> |
belaran@995 | 273 <imagedata width="100%" fileref="figs/kdiff3.png"/></imageobject> |
belaran@995 | 274 <textobject> |
belaran@995 | 275 <phrase>XXX ajoute texte</phrase> |
belaran@995 | 276 </textobject> |
belaran@995 | 277 </mediaobject> |
belaran@995 | 278 </figure> |
belaran@995 | 279 |
belaran@995 | 280 <para id="x_357">Pour chaque portion de fichier posant problème, nous |
belaran@995 | 281 pouvons choisir de résoudre le conflit en utilisant une combinaison de |
andre@1016 | 282 touches depuis la version de base, la nôtre, ou la leur. Nous pouvons |
belaran@995 | 283 aussi éditer manuellement les fichiers à tout moment, si c'est nécessaire.</para> |
belaran@995 | 284 |
belaran@995 | 285 <para id="x_358">Il y a <emphasis>beaucoup</emphasis> d'outils de |
wilk@1006 | 286 fusion disponibles, bien trop pour parler de tous ici. Leurs |
andre@1016 | 287 disponibilités varient selon les plateformes ainsi que leurs |
wilk@1006 | 288 avantages et inconvénients. La plupart sont optimisés pour |
wilk@1006 | 289 la fusion de fichier contenant un texte plat, certains sont spécialisés |
belaran@995 | 290 dans un format de fichier précis (généralement XML).</para> |
belaran@995 | 291 </sect2> |
belaran@995 | 292 |
belaran@995 | 293 <sect2> |
belaran@995 | 294 <title>Un exemple concret</title> |
belaran@995 | 295 |
belaran@995 | 296 <para id="x_359">Dans cet exemple, nous allons reproduire la |
belaran@995 | 297 modification de l'historique du fichier de la figure <xref |
wilk@1006 | 298 linkend="fig:tour-merge:conflict"/> ci-dessus. Commençons par créer |
belaran@995 | 299 un dépôt avec une version de base de notre document.</para> |
belaran@995 | 300 |
belaran@995 | 301 &interaction.tour-merge-conflict.wife; |
belaran@995 | 302 |
wilk@1006 | 303 <para id="x_35a">Créons un clone de ce dépôt et effectuons une |
belaran@995 | 304 modification dans le fichier.</para> |
belaran@995 | 305 |
belaran@995 | 306 &interaction.tour-merge-conflict.cousin; |
belaran@995 | 307 |
belaran@995 | 308 <para id="x_35b">Et un autre clone, pour simuler que quelqu'un d'autre effectue une |
belaran@995 | 309 modification sur le fichier. (Ceci pour suggérer qu'il n'est pas rare |
belaran@995 | 310 de devoir effectuer des fusions (merges) avec vos propres travaux quand |
belaran@995 | 311 vous isolez les tâches dans des dépôts distincts. En effet, vous |
belaran@995 | 312 aurez alors à trouver et résoudre certains conflits).</para> |
belaran@995 | 313 |
belaran@995 | 314 &interaction.tour-merge-conflict.son; |
belaran@995 | 315 |
belaran@995 | 316 <para id="x_35c">Maintenant que ces deux versions différentes du même fichier sont |
belaran@995 | 317 créées, nous allons configurer l'environnement de manière appropriée pour |
belaran@995 | 318 exécuter notre fusion (merge).</para> |
belaran@995 | 319 |
belaran@995 | 320 &interaction.tour-merge-conflict.pull; |
belaran@995 | 321 |
belaran@995 | 322 <para id="x_35d">Dans cette exemple, je n'utiliserais pas la commande Mercurial |
wilk@1006 | 323 habituelle <command>hgmerge</command> pour effectuer la |
belaran@995 | 324 fusion (merge), car il me faudrait abandonner ce joli petit exemple automatisé |
belaran@995 | 325 pour utiliser un outil graphique. À la place, je vais définir la |
belaran@995 | 326 variable d'environnement <envar>HGMERGE</envar> pour indiquer à |
belaran@995 | 327 Mercurial d'utiliser la commande non-interactive <command>merge</command>. |
wilk@1006 | 328 Cette dernière est comprise dans de nombreux systèmes <quote>à la Unix</quote>. |
belaran@995 | 329 Si vous exécutez cet exemple depuis votre ordinateur, ne vous |
andre@1016 | 330 occupez pas de définir <envar>HGMERGE</envar>. |
andre@1016 | 331 <!-- où se trouve la traduction de |
andre@1016 | 332 You'll get dropped into a GUI file |
andre@1016 | 333 merge tool instead, which is much preferable.)--> |
andre@1016 | 334 </para> |
belaran@995 | 335 |
belaran@995 | 336 &interaction.tour-merge-conflict.merge; |
belaran@995 | 337 |
belaran@995 | 338 |
belaran@995 | 339 <para id="x_35f">Parce que <command>merge</command> ne peut pas résoudre |
belaran@995 | 340 les modifications conflictuelles, il laisse des <emphasis>marqueurs de |
belaran@995 | 341 différences</emphasis> à l'intérieur du fichier qui a des conflits, |
andre@1016 | 342 indiquant clairement quelles lignes sont en conflit, et si elles |
belaran@995 | 343 viennent de notre fichier ou du fichier externe. |
belaran@995 | 344 </para> |
belaran@995 | 345 |
belaran@995 | 346 <para id="x_360">Mercurial peut distinguer, à la manière dont la |
belaran@995 | 347 commande <command>merge</command> se termine, qu'elle n'a pas été |
belaran@995 | 348 capable d'effectuer la fusion (merge), alors il nous indique que nous |
belaran@995 | 349 devons effectuer de nouveau cette opération. Ceci peut être très utile |
belaran@995 | 350 si, par exemple, nous exécutons un outil graphique de fusion et que |
belaran@995 | 351 nous le quittons sans nous rendre compte qu'il reste des conflits ou |
belaran@995 | 352 simplement par erreur.</para> |
belaran@995 | 353 |
belaran@995 | 354 <para id="x_361">Si la fusion (merge) automatique ou manuelle échoue, |
belaran@995 | 355 il n'y a rien pour nous empêcher de <quote>corriger le tir</quote> en |
andre@1016 | 356 modifiant nous-même les fichiers, et enfin effectuer le <quote>commit</quote> du |
belaran@995 | 357 fichier:</para> |
belaran@995 | 358 |
belaran@995 | 359 &interaction.tour-merge-conflict.commit; |
belaran@995 | 360 |
belaran@995 | 361 <note> |
andre@1016 | 362 <title>Où est la commande <command>hg resolve</command> ?</title> |
belaran@995 | 363 |
belaran@995 | 364 <para id="x_724">La commande <command>hg resolve</command> a été |
andre@1016 | 365 introduite dans la version 1.1 de Mercurial, qui a été publiée en |
belaran@995 | 366 décembre 2008. Si vous utilisez une version plus anciennne de |
belaran@995 | 367 Mercurial (exécutez la command <command>hg version</command> pour en |
wilk@1006 | 368 avoir le cœur net), cette commande ne sera pas disponible. Si votre |
belaran@995 | 369 version de Mercurial est plus ancienne que la 1.1, vous devriez très |
wilk@1006 | 370 fortement considérer une mise à jour vers une version plus récente avant |
belaran@995 | 371 d'essayer de régler des fusions complexes.</para> |
belaran@995 | 372 </note> |
belaran@995 | 373 </sect2> |
belaran@995 | 374 </sect1> |
belaran@995 | 375 |
belaran@995 | 376 <sect1 id="sec:tour-merge:fetch"> |
wilk@1006 | 377 <title>Simplification de la séquence <quote>pull-merge-commit</quote></title> |
belaran@995 | 378 |
belaran@995 | 379 <para id="x_362">La procédure pour effectuer la fusion indiquée |
belaran@995 | 380 ci-dessus est simple, mais requiert le lancement de trois commandes à la |
belaran@995 | 381 suite.</para> |
belaran@995 | 382 |
belaran@995 | 383 <programlisting>hg pull -u |
belaran@995 | 384 hg merge |
belaran@995 | 385 hg commit -m 'Merged remote changes'</programlisting> |
belaran@995 | 386 |
wilk@1006 | 387 <para id="x_363">Lors du <quote>commit</quote> final, vous devez également saisir un |
belaran@995 | 388 message, qui aura vraisemblablement assez peu d'intérêt.</para> |
belaran@995 | 389 |
belaran@995 | 390 <para id="x_364">Il serait assez sympathique de pouvoir réduire le |
belaran@995 | 391 nombre d'opérations nécessaire, si possible. De fait Mercurial est |
wilk@1006 | 392 fournit avec une extension appelée <literal role="hg-ext">fetch</literal> |
belaran@995 | 393 qui fait justement cela.</para> |
belaran@995 | 394 |
wilk@1006 | 395 <para id="x_365">Mercurial fournit un mécanisme d'extension flexible qui permet à chacun |
belaran@995 | 396 d'étendre ces fonctionnalités, tout en conservant le cœur de Mercurial |
wilk@1006 | 397 léger et facile à utiliser. Certaines extensions ajoutent de nouvelles |
belaran@995 | 398 commandes que vous pouvez utiliser en ligne de commande, alors que |
wilk@1006 | 399 d'autres travaillent <quote>en coulisse</quote>, par exemple en ajoutant des |
belaran@995 | 400 possibilités au serveur.</para> |
belaran@995 | 401 |
belaran@995 | 402 <para id="x_366">L'extension <literal role="hg-ext">fetch</literal> |
belaran@995 | 403 ajoute une nouvelle commande nommée, sans surprise, <command |
wilk@1006 | 404 role="hg-cmd">hg fetch</command>. Cette extension consiste en une |
belaran@995 | 405 combinaison de <command role="hg-cmd">hg pull</command>, <command |
wilk@1006 | 406 role="hg-cmd">hg update</command> et <command role="hg-cmd">hg |
belaran@995 | 407 merge</command>. Elle commence par récupérer les modifications d'un |
belaran@995 | 408 autre dépôt dans le dépôt courant. Si elle trouve que les |
wilk@1006 | 409 modifications ajoutent une nouvelle <quote>head</quote>, elle effectue un <quote>merge</quote>, |
wilk@1006 | 410 et ensuite <quote>commit</quote> le résultat du <quote>merge</quote> avec un message généré |
wilk@1006 | 411 automatiquement. Si aucune <quote>head</quote> n'a été ajouté, elle met à jour le |
wilk@1006 | 412 répertoire de travail au niveau de la nouvelle révision <quote>tip</quote>.</para> |
belaran@995 | 413 |
belaran@995 | 414 <para id="x_367">Activer l'extension <literal |
andre@1016 | 415 role="hg-ext">fetch</literal> est facile. Modifiez votre fichier <filename |
belaran@995 | 416 role="special">.hgrc</filename>, et soit allez à la section <literal |
wilk@1006 | 417 role="rc-extensions">extensions</literal> soit créez une section |
belaran@995 | 418 <literal role="rc-extensions">extensions</literal>. Ensuite ajoutez |
wilk@1006 | 419 une ligne qui consiste simplement en <quote>fetch =</quote>.</para> |
belaran@995 | 420 |
belaran@995 | 421 <programlisting>[extensions] |
belaran@995 | 422 fetch =</programlisting> |
belaran@995 | 423 |
belaran@995 | 424 <para id="x_368">(Normalement, sur la partie droite de |
belaran@995 | 425 <quote><literal>=</literal></quote> devrait apparaître le chemin de |
belaran@995 | 426 l'extension, mais étant donné que l'extension <literal |
belaran@995 | 427 role="hg-ext">fetch</literal> fait partie de la distribution standard, |
belaran@995 | 428 Mercurial sait où la trouver.) </para> |
belaran@995 | 429 |
belaran@995 | 430 </sect1> |
belaran@995 | 431 |
belaran@995 | 432 <sect1> |
belaran@995 | 433 <title>Renommer, copier, et fusionner (merge)</title> |
belaran@995 | 434 |
belaran@995 | 435 <para id="x_729">En cours de la vie d'un projet, nous allons souvent |
belaran@995 | 436 vouloir changer la disposition de ses fichiers et de ses répertoires. |
belaran@995 | 437 Ceci peut être aussi simple que de changer le nom d'un seul fichier, |
andre@1016 | 438 et aussi compliqué que de restructurer une hiérarchie entière de fichiers |
belaran@995 | 439 au sein du projet.</para> |
belaran@995 | 440 |
belaran@995 | 441 <para id="x_72a">Mercurial permet de faire ce genre de modification de |
belaran@995 | 442 manière fluide, à condition de l'informer de ce que nous faisons. Si |
wilk@1006 | 443 vous voulez renommer un ficher, vous devriez utiliser la commande |
belaran@995 | 444 <command>hg rename</command><footnote> |
wilk@1006 | 445 <para id="x_72b">Si vous êtes un utilisateur d'Unix, vous serez content |
wilk@1006 | 446 de savoir que la commande <command>hg rename</command> |
belaran@995 | 447 peut être abrégée en <command>hg mv</command>.</para> |
belaran@995 | 448 </footnote> pour changer son nom, ainsi Mercurial peut ensuite prendre |
andre@1016 | 449 la bonne décision, plus tard, en cas de fusion (merge).</para> |
belaran@995 | 450 |
wilk@1006 | 451 <para id="x_72c">Nous étudierons, en détail, l'utilisation de ces commandes |
wilk@1006 | 452 dans le chapitre <xref linkend="chap:daily.copy"/>.</para> |
belaran@995 | 453 </sect1> |
belaran@964 | 454 </chapter> |
belaran@964 | 455 |
belaran@964 | 456 <!-- |
belaran@964 | 457 local variables: |
belaran@964 | 458 sgml-parent-document: ("00book.xml" "book" "chapter") |
belaran@964 | 459 end: |
belaran@976 | 460 --> |