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