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