hgbook

annotate fr/ch03-tour-merge.xml @ 1032:a55f319bcc67

Merge with Romain Pelisse
author Bryan O'Sullivan <bos@serpentine.com>
date Sat Jul 10 06:24:49 2010 +0100 (2010-07-10)
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 -->