hgbook

annotate fr/ch03-tour-merge.xml @ 976:713f0f69029a

merge with Italian, and very (few) work on ch03
author Romain PELISSE <belaran@gmail.com>
date Fri Sep 04 16:33:35 2009 +0200 (2009-09-04)
parents 6b680d569bb4
children 56953b292c8a
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"?>
belaran@976 5 <title>Un rapide tour 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>
belaran@976 14 <para od="x_339">La fusion est un aspect fondamental lorsqu'on
belaran@976 15 travaille iavec un gestionnaire de source distribué.</para>
belaran@976 16
belaran@976 17 <itemizedlist>
belaran@976 18 <listitem><para>Alice et Bob ont chacun une copie personnelle du dépôt d'un
belaran@964 19 projet sur lequel ils collaborent. Alice corrige un \textit{bug}
belaran@964 20 dans son dépôt, et Bob ajoute une nouvelle fonctionnalité dans le
belaran@964 21 sien. Ils veulent un dépôt partagé avec à la fois le correctif du
belaran@964 22 \textit{bug} et la nouvelle fonctionnalité.</para>
belaran@964 23 </listitem>
belaran@964 24 <listitem><para>Je travaille régulièrement sur plusieurs tâches différentes sur
belaran@964 25 un seul projet en même temps, chacun isolé dans son propre dépôt.
belaran@964 26 Travailler ainsi signifie que je dois régulièrement fusionner une
belaran@964 27 partie de mon code avec celui des autres.</para>
belaran@964 28 </listitem></itemizedlist>
belaran@964 29
belaran@964 30 <para>Parce que la fusion est une opération si commune à réaliser,
belaran@964 31 Mercurial la rend facile. Étudions ensemble le déroulement des opérations.
belaran@964 32 Nous commencerons encore par faire un clone d'un autre dépôt (vous voyez
belaran@964 33 que l'on fait ça tout le temps ?) puis nous ferons quelques modifications
belaran@964 34 dessus.
belaran@964 35 <!-- &interaction.tour.merge.clone; -->
belaran@964 36 Nous devrions avoir maintenant deux copies de <filename>hello.c</filename> avec
belaran@964 37 des contenus différents. Les historiques de ces deux dépôts ont aussi
belaran@964 38 divergés, comme illustré dans la figure <xref linkend="fig:tour-merge:sep-repos"/>.</para>
belaran@964 39
belaran@964 40 <para><!-- &interaction.tour.merge.cat; --></para>
belaran@964 41
belaran@964 42 <informalfigure>
belaran@964 43
belaran@964 44 <para> <mediaobject><imageobject><imagedata fileref="tour-merge-sep-repos"/></imageobject><textobject><phrase>XXX add text</phrase></textobject></mediaobject>
belaran@964 45 <caption><para>Historiques récent divergents des dépôts \dirname{my-hello</para></caption>
belaran@964 46 et <filename class="directory">my-new-hello</filename>}
belaran@964 47 \label{fig:tour-merge:sep-repos}</para>
belaran@964 48 </informalfigure>
belaran@964 49
belaran@964 50 <para>Nous savons déjà que récupérer les modifications depuis notre dépôt
belaran@964 51 <filename class="directory">my-hello</filename> n'aura aucun effet sur l'espace de travail.
belaran@964 52 </para>
belaran@964 53
belaran@964 54 <para><!-- &interaction.tour.merge.pull; -->
belaran@964 55 </para>
belaran@964 56
belaran@964 57 <para>Néanmoins, la commande <command role="hg-cmd">hg pull</command> nous indique quelque chose au
belaran@964 58 sujet des <quote>heads</quote>.
belaran@964 59 </para>
belaran@964 60
belaran@964 61 <sect2>
belaran@964 62 <title>\textit{Head changesets}</title>
belaran@964 63
belaran@964 64 <para>Une \textit{head}\footnote{NdT: Je garde \textit{head} que j'accorde
belaran@964 65 au féminin comme la coutume orale l'a imposé.} est un \textit{changeset}
belaran@964 66 sans descendants, ou enfants, comme on les désigne parfois. La révision
belaran@964 67 \textit{tip} est une \textit{head}, car la dernière révision dans un dépôt
belaran@964 68 n'a aucun enfant, mais il est important de noter qu'un dépôt peut contenir
belaran@964 69 plus d'une \textit{head}.
belaran@964 70 </para>
belaran@964 71
belaran@964 72 <informalfigure>
belaran@964 73
belaran@964 74 <para> <mediaobject><imageobject><imagedata fileref="tour-merge-pull"/></imageobject><textobject><phrase>XXX add text</phrase></textobject></mediaobject>
belaran@964 75 \caption{Contenu d'un dépôt après avoir transféré le contenu du dépôt
belaran@964 76 <filename class="directory">my-hello</filename> dans le dépôt <filename class="directory">my-new-hello</filename>}
belaran@964 77 \label{fig:tour-merge:pull}
belaran@964 78 </para>
belaran@964 79 </informalfigure>
belaran@964 80
belaran@964 81 <para>Dans la figure <xref linkend="fig:tour-merge:pull"/>, vous pouvez constater l'effet
belaran@964 82 d'un \textit{pull} depuis le dépôt <filename class="directory">my-hello</filename> dans le dépôt
belaran@964 83 <filename class="directory">my-new-hello</filename>. L'historique qui était déjà présent dans le dépôt
belaran@964 84 <filename class="directory">my-new-hello</filename> reste intact, mais une nouvelle révision a été
belaran@964 85 ajoutée. En vous reportant à la figure <xref linkend="fig:tour-merge:sep-repos"/>,
belaran@964 86 vous pouvez voir que le \textit{<emphasis>changeset ID</emphasis>} reste le même dans
belaran@964 87 le nouveau dépôt, mais que le <emphasis>numéro de révision</emphasis> reste le même.
belaran@964 88 (Ceci est un parfait exemple de pourquoi il n'est fiable d'utiliser les
belaran@964 89 numéros de révision lorsque l'on discute d'un \textit{changeset}.) Vous
belaran@964 90 pouvez voir les \texit{heads} présentes dans le dépôt en utilisant la
belaran@964 91 commande <command role="hg-cmd">hg heads</command>.
belaran@964 92 <!-- &interaction.tour.merge.heads; -->
belaran@964 93 </para>
belaran@964 94
belaran@964 95 </sect2>
belaran@964 96 <sect2>
belaran@964 97 <title>Effectuer la fusion</title>
belaran@964 98
belaran@964 99 <para>Que se passe-t-il quand vous essayez d'utiliser la commande <command role="hg-cmd">hg update</command>
belaran@964 100 pour mettre à jour votre espace de travail au nouveau \textit{tip}.
belaran@964 101 <!-- &interaction.tour.merge.update; -->
belaran@964 102 Mercurial nous prévient que la commande <command role="hg-cmd">hg update</command> n'effectuera pas
belaran@964 103 la fusion, il ne veut pas mettre à jour l'espace de travail quand il
belaran@964 104 estime que nous pourrions avoir besoin d'une fusion, à moins de lui
belaran@964 105 forcer la main. À la place, il faut utiliser la commande <command role="hg-cmd">hg merge</command>
belaran@964 106 pour fusionner les deux \textit{heads}.
belaran@964 107 <!-- &interaction.tour.merge.merge; -->
belaran@964 108 </para>
belaran@964 109
belaran@964 110 <informalfigure>
belaran@964 111
belaran@964 112 <para> <mediaobject><imageobject><imagedata fileref="tour-merge-merge"/></imageobject><textobject><phrase>XXX add text</phrase></textobject></mediaobject>
belaran@964 113 \caption{Espace de travail et dépôt lors d'une fusion, et dans le
belaran@964 114 \textit{commit} qui suit.}
belaran@964 115 \label{fig:tour-merge:merge}
belaran@964 116 </para>
belaran@964 117 </informalfigure>
belaran@964 118
belaran@964 119 <para>Ceci met à jour l'espace de travail de manière à ce qu'il contienne
belaran@964 120 les modifications des <emphasis>deux</emphasis> \textit{heads}, ce qui apparaît dans
belaran@964 121 les sorties de la commande <command role="hg-cmd">hg parents</command> et le contenu de
belaran@964 122 <filename>hello.c</filename>.
belaran@964 123 <!-- &interaction.tour.merge.parents; -->
belaran@964 124 </para>
belaran@964 125
belaran@964 126 </sect2>
belaran@964 127 <sect2>
belaran@964 128 <title>Effectuer le \textit{commit} du résultat de la fusion</title>
belaran@964 129
belaran@964 130 <para>Dès l'instant où vous avez effectué une fusion, <command role="hg-cmd">hg parents</command> vous
belaran@964 131 affichera deux parents, avant que vous n'exécutiez la commande
belaran@964 132 <command role="hg-cmd">hg commit</command> sur le résultat de la fusion.
belaran@964 133 <!-- &interaction.tour.merge.commit; -->
belaran@964 134 Nous avons maintenant un nouveau \textit{tip}, remarquer qu'il contient
belaran@964 135 <emphasis>à la fois</emphasis> nos anciennes \textit{heads} et leurs parents. Ce sont
belaran@964 136 les mêmes révisions que nous avions affichées avec la commande
belaran@964 137 <command role="hg-cmd">hg parents</command>.
belaran@964 138 </para>
belaran@964 139
belaran@964 140 <para><!-- &interaction.tour.merge.tip; -->
belaran@964 141 Dans la figure <xref linkend="fig:tour-merge:merge"/>, vous pouvez voir une représentation
belaran@964 142 de ce qui se passe dans l'espace de travail pendant la fusion, et comment ceci
belaran@964 143 affecte le dépôt lors du \textit{commit}. Pendant la fusion, l'espace de travail,
belaran@964 144 qui a deux \texit{changesets} comme parents, voit ces derniers devenir le parent
belaran@964 145 %%% TODO: le parent ou "les parents" : plus logique mais si il reste seulement
belaran@964 146 %%% un changeset, alors c'est effectivement un parent (le changeset est hermaphrodite)
belaran@964 147 d'un nouveau \textit{changeset}.
belaran@964 148 </para>
belaran@964 149
belaran@964 150 </sect2>
belaran@964 151 </sect1>
belaran@964 152 <sect1>
belaran@964 153 <title>Fusionner les modifications en conflit</title>
belaran@964 154
belaran@964 155 <para>La plupart des fusions sont assez simple à réaliser, mais parfois
belaran@964 156 vous vous retrouverez à fusionner des fichiers où la modification touche
belaran@964 157 la même portion de code, au sein d'un même fichier. À moins que ces
belaran@964 158 modification ne soient identiques, ceci aboutira à un <emphasis>conflit</emphasis>,
belaran@964 159 et vous devrez décider comment réconcilier les différentes modifications
belaran@964 160 dans un tout cohérent.
belaran@964 161 </para>
belaran@964 162
belaran@964 163 <informalfigure>
belaran@964 164
belaran@964 165 <para> <mediaobject><imageobject><imagedata fileref="tour-merge-conflict"/></imageobject><textobject><phrase>XXX add text</phrase></textobject></mediaobject>
belaran@964 166 <caption><para>Modifications conflictuelles dans un document</para></caption>
belaran@964 167 \label{fig:tour-merge:conflict}
belaran@964 168 </para>
belaran@964 169 </informalfigure>
belaran@964 170
belaran@964 171 <para>La figure <xref linkend="fig:tour-merge:conflict"/> illustre un cas de modifications
belaran@964 172 conflictuelles dans un document. Nous avons commencé avec une version simple
belaran@964 173 de ce fichier, puis nous avons ajouté des modifications, pendant que
belaran@964 174 quelqu'un d'autre modifiait le même texte. Notre tâche dans la résolution
belaran@964 175 du conflit est de décider à quoi le fichier devrait ressembler.
belaran@964 176 </para>
belaran@964 177
belaran@964 178 <para>Mercurial n'a pas de mécanisme interne pour gérer les conflits.
belaran@964 179 À la place, il exécute un programme externe appelé <command>hgmerge</command>.
belaran@964 180 Il s'agit d'un script shell qui est embarqué par Mercurial, vous
belaran@964 181 pouvez le modifier si vous le voulez. Ce qu'il fait par défaut est
belaran@964 182 d'essayer de trouver un des différents outils de fusion qui seront
belaran@964 183 probablement installés sur le système. Il commence par les outils
belaran@964 184 totalement automatiques, et si ils échouent (parce que la résolution
belaran@964 185 du conflit nécessite une intervention humaine) ou si ils sont absents,
belaran@964 186 le script tente d'exécuter certains outils graphiques de fusion.
belaran@964 187 </para>
belaran@964 188
belaran@964 189 <para>Il est aussi possible de demander à Mercurial d'exécuter un autre
belaran@964 190 programme ou un autre script au lieu de la commande <command>hgmerge</command>,
belaran@964 191 en définissant la variable d'environnement <envar>HGMERGE</envar> avec le nom
belaran@964 192 du programme de votre choix.
belaran@964 193 </para>
belaran@964 194
belaran@964 195 <sect2>
belaran@964 196 <title>Utiliser un outil graphique de fusion</title>
belaran@964 197
belaran@964 198 <para>Mon outil de fusion préféré est <command>kdiff3</command>, que j'utilise ici
belaran@964 199 pour illustrer les fonctionnalités classiques des outils graphiques
belaran@964 200 de fusion. Vous pouvez voir une capture d'écran de l'utilisation de
belaran@964 201 <command>kdiff3</command> dans la figure <xref linkend="fig:tour-merge:kdiff3"/>. Cet outil
belaran@964 202 effectue une <emphasis>fusion \textit{three-way</emphasis>}, car il y a trois différentes
belaran@964 203 versions du fichier qui nous intéresse. Le fichier découpe la partie
belaran@964 204 supérieure de la fenêtre en trois panneaux:
belaran@964 205 </para>
belaran@964 206
belaran@964 207 <itemizedlist>
belaran@964 208 <listitem><para>A gauche on la version de <emphasis>base</emphasis> du fichier, soit la plus
belaran@964 209 récente version des deux versions qu'on souhaite fusionner.
belaran@964 210 </para>
belaran@964 211 </listitem>
belaran@964 212 <listitem><para>Au centre, il y a <quote>notre</quote> version du fichier, avec le contenu
belaran@964 213 que nous avons modifié.
belaran@964 214 </para>
belaran@964 215 </listitem>
belaran@964 216 <listitem><para>Sur la droite, on trouve <quote>leur</quote> version du fichier, celui qui
belaran@964 217 contient le \textit{changeset} que nous souhaitons intégré.
belaran@964 218 </para>
belaran@964 219 </listitem></itemizedlist>
belaran@964 220
belaran@964 221 <para>Dans le panneau en dessous, on trouve le <emphasis>résultat</emphasis> actuel de notre
belaran@964 222 fusion. Notre tâche consiste donc à remplacement tous les textes en rouges,
belaran@964 223 qui indiquent des conflits non résolus, avec une fusion manuelle et pertinente
belaran@964 224 de <quote>notre</quote> version et de la <quote>leur</quote>.
belaran@964 225 </para>
belaran@964 226
belaran@964 227 <para>Tous les quatre panneaux sont <emphasis>accrochés ensemble</emphasis>, si nous déroulons
belaran@964 228 les ascenseurs verticalement ou horizontalement dans chacun d'entre eux, les
belaran@964 229 autres sont mis à jour avec la section correspondante dans leurs fichiers
belaran@964 230 respectifs.
belaran@964 231 </para>
belaran@964 232
belaran@964 233 <informalfigure>
belaran@964 234
belaran@964 235 <para> <mediaobject><imageobject><imagedata fileref="kdiff3"/></imageobject><textobject><phrase>XXX add text</phrase></textobject></mediaobject>
belaran@964 236 <caption><para>Utilisation de \command{kdiff3</para></caption> pour fusionner différentes versions
belaran@964 237 d'un fichier.}
belaran@964 238 \label{fig:tour-merge:kdiff3}
belaran@964 239 </para>
belaran@964 240 </informalfigure>
belaran@964 241
belaran@964 242 <para>Pour chaque portion de fichier posant problème, nous pouvons choisir
belaran@964 243 de résoudre le conflit en utilisant une combinaison
belaran@964 244 de texte depuis la version de base, la notre, ou la leur. Nous pouvons
belaran@964 245 aussi éditer manuellement les fichiers à tout moment, si c'est
belaran@964 246 nécessaire.
belaran@964 247 </para>
belaran@964 248
belaran@964 249 <para>Il y a <emphasis>beaucoup</emphasis> d'outils de fusion disponibles, bien trop pour
belaran@964 250 en parler de tous ici. Leurs disponibilités varient selon les plate formes
belaran@964 251 ainsi que leurs avantages et inconvénients. La plupart sont optimisé pour
belaran@964 252 la fusion de fichier contenant un texte plat, certains sont spécialisé
belaran@964 253 dans un format de fichier précis (généralement XML).
belaran@964 254 </para>
belaran@964 255
belaran@964 256 </sect2>
belaran@964 257 <sect2>
belaran@964 258 <title>Un exemple concret</title>
belaran@964 259
belaran@964 260 <para>Dans cet exemple, nous allons reproduire la modification de l'historique
belaran@964 261 du fichier de la figure <xref linkend="fig:tour-merge:conflict"/> ci dessus. Commençons
belaran@964 262 par créer un dépôt avec une version de base de notre document.
belaran@964 263 </para>
belaran@964 264
belaran@964 265 <para><!-- &interaction.tour-merge-conflict.wife; -->
belaran@964 266 Créons un clone de ce dépôt et faisons une modification dans le fichier.
belaran@964 267 <!-- &interaction.tour-merge-conflict.cousin; -->
belaran@964 268 Et un autre clone, pour simuler que quelqu'un d'autre effectue une
belaran@964 269 modification sur le fichier. (Ceci pour suggérer qu'il n'est pas rare
belaran@964 270 de devoir effectuer des \textit{merge} avec vos propres travaux quand
belaran@964 271 vous isolez les tâches dans des dépôts distincts. En effet, vous
belaran@964 272 aurez alors à trouver et résoudre certains conflits).
belaran@964 273 <!-- &interaction.tour-merge-conflict.son; -->
belaran@964 274 Maintenant que ces deux versions différentes du même fichier sont
belaran@964 275 créées, nous allons configurer l'environnement de manière appropriée pour
belaran@964 276 exécuter notre \textit{merge}.
belaran@964 277 <!-- &interaction.tour-merge-conflict.pull; -->
belaran@964 278 </para>
belaran@964 279
belaran@964 280 <para>Dans cette exemple, je n'utiliserais pas la commande Mercurial
belaran@964 281 habituelle <command>hgmerge</command> pour effectuer le \textit{merge},
belaran@964 282 car il me faudrait abandonner ce joli petit exemple automatisé
belaran@964 283 pour utiliser un outil graphique. À la place, je vais définir
belaran@964 284 la variable d'environnement <envar>HGMERGE</envar> pour indiquer à
belaran@964 285 Mercurial d'utiliser la commande non-interactive <command>merge</command>.
belaran@964 286 Cette dernière est embarquée par de nombreux systèmes <quote>à la Unix</quote>.
belaran@964 287 Si vous exécutez cet exemple depuis votre ordinateur, ne vous
belaran@964 288 occupez pas de définir <envar>HGMERGE</envar>.
belaran@964 289 <!-- &interaction.tour-merge-conflict.merge; -->
belaran@964 290 Parce que <command>merge</command> ne peut pas résoudre les modifications
belaran@964 291 conflictuelles, il laisse des <emphasis>marqueurs de différences</emphasis>
belaran@964 292 \footnote{NdT: Oui, je traduis \textit{merge markers} par un sens
belaran@964 293 inverse en Français, mais je pense vraiment que c'est plus clair
belaran@964 294 comme ça...} à l'intérieur du fichier qui a des conflits, indiquant
belaran@964 295 clairement quelles lignes sont en conflits, et si elles viennent de
belaran@964 296 notre fichier ou du fichier externe.
belaran@964 297 </para>
belaran@964 298
belaran@964 299 <para>Mercurial peut distinguer, à la manière dont la commande <command>merge</command>
belaran@964 300 se termine, qu'elle n'a pas été capable d'effectuer le \textit{merge},
belaran@964 301 alors il nous indique que nous devons effectuer de nouveau cette
belaran@964 302 opération. Ceci peut être très utile si, par exemple, nous exécutons un
belaran@964 303 outil graphique de fusion et que nous le quittons sans nous rendre compte
belaran@964 304 qu'il reste des conflits ou simplement par erreur.
belaran@964 305 </para>
belaran@964 306
belaran@964 307 <para>Si le \textit{merge} automatique ou manuel échoue, il n'y a rien pour
belaran@964 308 nous empêcher de <quote>corriger le tir</quote> en modifiant nous même les fichiers,
belaran@964 309 et enfin effectuer le \textit{commit} du fichier:
belaran@964 310 <!-- &interaction.tour-merge-conflict.commit; -->
belaran@964 311 </para>
belaran@964 312
belaran@964 313 </sect2>
belaran@964 314 </sect1>
belaran@964 315 <sect1>
belaran@964 316 <title>Simplification de la séquence pull-merge-commit</title>
belaran@964 317 <para>\label{sec:tour-merge:fetch}
belaran@964 318 </para>
belaran@964 319
belaran@964 320 <para>La procédure pour effectuer la fusion indiquée ci-dessus est simple,
belaran@964 321 mais requiert le lancement de trois commandes à la suite.
belaran@964 322 </para>
belaran@964 323 <programlisting>
belaran@964 324 <para> hg pull
belaran@964 325 hg merge
belaran@964 326 hg commit -m 'Merged remote changes'
belaran@964 327 </para>
belaran@964 328 </programlisting>
belaran@964 329
belaran@964 330 <para>Lors du \textit{commit} final, vous devez également saisir un message,
belaran@964 331 qui aura vraisemblablement assez peu d'intérêt.
belaran@964 332 </para>
belaran@964 333
belaran@964 334 <para>Il serait assez sympathique de pouvoir réduire le nombre d'opérations
belaran@964 335 nécessaire, si possible. De fait Mercurial est fourni avec une
belaran@964 336 extension appelé <literal role="hg-ext">fetch</literal> qui fait justement cela.
belaran@964 337 </para>
belaran@964 338
belaran@964 339 <para>Mercurial fourni un mécanisme d'extension flexible qui permet à chacun
belaran@964 340 d'étendre ces fonctionnalités, tout en conservant le cœur de Mercurial
belaran@964 341 léger et facile à utiliser. Certains extensions ajoutent de nouvelles
belaran@964 342 commandes que vous pouvez utiliser en ligne de commande, alors que
belaran@964 343 d'autres travaillent <quote>en coulisse,</quote> par exemple en ajoutant des
belaran@964 344 possibilités au serveur.
belaran@964 345 </para>
belaran@964 346
belaran@964 347 <para>L'extension <literal role="hg-ext">fetch</literal> ajoute une nouvelle commande nommée, sans
belaran@964 348 surprise, <command role="hg-cmd">hg fetch</command>. Cette extension résulte en une combinaison
belaran@964 349 de <command role="hg-cmd">hg pull</command>, <command role="hg-cmd">hg update</command> and <command role="hg-cmd">hg merge</command>. Elle commence par
belaran@964 350 récupérer les modifications d'un autre dépôt dans le dépôt courant.
belaran@964 351 Si elle trouve que les modifications ajoutent une nouvelle \textit{head},
belaran@964 352 elle effectue un \textit{merge}, et ensuite \texit{commit} le résultat
belaran@964 353 du \textit{merge} avec un message généré automatiquement. Si aucune
belaran@964 354 \textit{head} n'ont été ajouté, elle met à jour le répertoire de travail
belaran@964 355 au niveau du nouveau \textit{changeset} \textit{tip}.
belaran@964 356 </para>
belaran@964 357
belaran@964 358
belaran@964 359 <para>Activer l'extension <literal role="hg-ext">fetch</literal> est facile. Modifiez votre <filename role="special">.hgrc</filename>,
belaran@964 360 et soit allez à la section <literal role="rc-extensions">extensions</literal> soit créer une
belaran@964 361 section <literal role="rc-extensions">extensions</literal>. Ensuite ajoutez une ligne qui consiste
belaran@964 362 simplement en <quote>\Verb+fetch =</quote>.
belaran@964 363 </para>
belaran@964 364
belaran@964 365 <programlisting>
belaran@964 366 <para> [extensions]
belaran@964 367 fetch =
belaran@964 368 </para>
belaran@964 369 </programlisting>
belaran@964 370 <para>(Normalement, sur la partie droite de <quote><literal>=</literal></quote> devrait apparaître
belaran@964 371 le chemin de l'extension, mais étant donné que l'extension <literal role="hg-ext">fetch</literal>
belaran@964 372 fait partie de la distribution standard, Mercurial sait où la trouver.)
belaran@964 373 </para>
belaran@964 374
belaran@964 375 </sect1>
belaran@964 376 </chapter>
belaran@964 377
belaran@964 378 <!--
belaran@964 379 local variables:
belaran@964 380 sgml-parent-document: ("00book.xml" "book" "chapter")
belaran@964 381 end:
belaran@976 382 -->