rev |
line source |
belaran@970
|
1
|
bos@559
|
2
|
bos@686
|
3 <appendix id="svn">
|
bos@687
|
4 <?dbhtml filename="migrating-to-mercurial.html"?>
|
belaran@970
|
5 <title>Migrer vers Mercurial</title>
|
belaran@970
|
6
|
belaran@970
|
7 <para id="x_6e1">Une manière courante de s'essayer à un nouveau
|
JeanMarieClement@974
|
8 gestionnaire de révisions est d'expérimenter en migrant un
|
belaran@970
|
9 projet existant, plutôt que le faire avec un nouveau projet.
|
belaran@970
|
10 </para>
|
belaran@970
|
11
|
belaran@970
|
12 <para id="x_6e2">Dans cette annexe, nous discuterons comment importer
|
belaran@970
|
13 l'historique d'un projet dans Mercurial, et à quoi faire attention
|
youshe@984
|
14 si vous êtes habitués à un autre outil de gestion de révisions.
|
belaran@970
|
15 </para>
|
bos@686
|
16
|
bos@686
|
17 <sect1>
|
belaran@970
|
18 <title>Importer l'historique depuis un autre système</title>
|
belaran@970
|
19
|
belaran@970
|
20 <para id="x_6e3">Mercurial est livré avec une extension nommée
|
JeanMarieClement@974
|
21 <literal>convert</literal>, qui permet d'importer un historique
|
JeanMarieClement@974
|
22 depuis les gestionnaire de révisions les plus courants. Au moment de
|
belaran@970
|
23 l'écriture de ce livre, il pouvait importer l'historique depuis:
|
belaran@970
|
24 </para>
|
bos@686
|
25 <itemizedlist>
|
bos@686
|
26 <listitem>
|
bos@691
|
27 <para id="x_6e4">Subversion</para>
|
bos@691
|
28 </listitem>
|
bos@691
|
29 <listitem>
|
bos@691
|
30 <para id="x_6e5">CVS</para>
|
bos@691
|
31 </listitem>
|
bos@691
|
32 <listitem>
|
bos@691
|
33 <para id="x_6e6">git</para>
|
bos@691
|
34 </listitem>
|
bos@691
|
35 <listitem>
|
bos@691
|
36 <para id="x_6e7">Darcs</para>
|
bos@691
|
37 </listitem>
|
bos@691
|
38 <listitem>
|
bos@691
|
39 <para id="x_6e8">Bazaar</para>
|
bos@691
|
40 </listitem>
|
bos@691
|
41 <listitem>
|
bos@691
|
42 <para id="x_6e9">Monotone</para>
|
bos@691
|
43 </listitem>
|
bos@691
|
44 <listitem>
|
bos@691
|
45 <para id="x_6ea">GNU Arch</para>
|
bos@691
|
46 </listitem>
|
bos@691
|
47 <listitem>
|
bos@691
|
48 <para id="x_6eb">Mercurial</para>
|
bos@686
|
49 </listitem>
|
bos@686
|
50 </itemizedlist>
|
bos@686
|
51
|
belaran@970
|
52 <para id="x_6ec">(Pour savoir pourquoi Mercurial lui même est supporté
|
JeanMarieClement@974
|
53 comme source, voir <xref linkend="svn.filemap"/>.)</para>
|
belaran@970
|
54
|
belaran@970
|
55 <para id="x_6ed">Vous pouvez activer l'extension de la manière
|
JeanMarieClement@974
|
56 habituelle, en éditant votre fichier <filename>~/.hgrc</filename></para>
|
bos@686
|
57
|
bos@686
|
58 <programlisting>[extensions]
|
bos@686
|
59 convert =</programlisting>
|
bos@686
|
60
|
belaran@970
|
61 <para id="x_6ee">Ceci rendra la commande <command>hg convert</command>
|
belaran@970
|
62 disponible. La commande est facile à utiliser. Par exemple, la
|
belaran@970
|
63 commande suivante va importer l'historique Subversion du <emphasis
|
JeanMarieClement@974
|
64 remap="it">framework</emphasis> de test <quote>Nose Unit</quote> dans Mercurial.
|
belaran@970
|
65 </para>
|
bos@686
|
66
|
bos@686
|
67 <screen><prompt>$</prompt> <userinput>hg convert http://python-nose.googlecode.com/svn/trunk</userinput></screen>
|
bos@686
|
68
|
belaran@970
|
69 <para id="x_6ef">L'extension <literal>convert</literal> opère de
|
JeanMarieClement@974
|
70 manière incrémentale. En d'autres mots, après une première exécution de
|
JeanMarieClement@974
|
71 la commande <command>hg convert</command>, les exécutions ultérieures
|
JeanMarieClement@974
|
72 importeront les révisions ultérieures à l'exécution précédente.
|
youshe@984
|
73 La conversion incrémentale ne réussira que si
|
belaran@970
|
74 vous exécutez <command>hg convert</command> dans le même dépôt que vous
|
JeanMarieClement@974
|
75 aviez utilisé à l'origine, ceci parce que l'extension <literal>convert</literal>
|
JeanMarieClement@974
|
76 sauvegarde un certain nombre de méta-données privées dans le fichier
|
JeanMarieClement@974
|
77 <filename>.hg/shamap</filename> (non versioné) au sein du dépôt cible.
|
belaran@970
|
78 </para>
|
belaran@970
|
79
|
JeanMarieClement@974
|
80 <para id="x_707">Lorsque vous voulez faire des modifications en utilisant
|
belaran@970
|
81 Mercurial, le mieux est de faire un clone de l'ensemble de l'arborescence
|
JeanMarieClement@974
|
82 que vous souhaitez convertir, et de laisser l'arborescence d'origine pour
|
JeanMarieClement@974
|
83 de futures conversions incrémentales. C'est la manière la plus sûre pour vous laisser
|
JeanMarieClement@974
|
84 récupérer et fusionner les modifications futures depuis l'outil de gestion
|
JeanMarieClement@974
|
85 de révisions dans votre nouveau dépôt Mercurial.</para>
|
bos@693
|
86
|
bos@693
|
87 <sect2>
|
belaran@970
|
88 <title>Convertir plusieurs branches</title>
|
belaran@970
|
89
|
JeanMarieClement@974
|
90 <para id="x_708">La commande <command>hg convert</command> citée
|
JeanMarieClement@974
|
91 ci-dessus convertit seulement l'historique de la <literal>branche
|
JeanMarieClement@974
|
92 principale (trunk)</literal> du dépôt Subversion. Si nous utilisons
|
belaran@970
|
93 à la place l'URL <literal>http://python-nose.googlecode.com/svn</literal>,
|
JeanMarieClement@974
|
94 Mercurial va automatiquement détecter la
|
belaran@970
|
95 <literal>branche principale (trunk)</literal>, les <literal>étiquettes
|
youshe@984
|
96 (tags)</literal>, et les <literal>branches</literal> que les dépôts
|
JeanMarieClement@974
|
97 Subversion utilisent généralement, et les importera chacun dans
|
belaran@970
|
98 une branche Mercurial distincte.</para>
|
belaran@970
|
99
|
belaran@970
|
100 <para id="x_709">Par défaut, chaque branche Subversion importée
|
JeanMarieClement@974
|
101 dans Mercurial se voit attribuer un nom de branche. Une fois la
|
JeanMarieClement@974
|
102 conversion achevée, vous pouvez obtenir la liste des noms des branches
|
belaran@970
|
103 actives dans le dépôt Mercurial en utilisant la commande
|
belaran@970
|
104 <command>hg branches -a</command>. Si vous préférez importer les
|
belaran@970
|
105 branches Subversion sans noms, ajoutez l'option <option>--config
|
belaran@970
|
106 convert.hg.usebranches=false</option> à la commande
|
belaran@970
|
107 <command>hg convert</command>.</para>
|
belaran@970
|
108
|
JeanMarieClement@974
|
109 <para id="x_70a">Une fois votre arborescence convertie,
|
JeanMarieClement@974
|
110 si vous souhaitez travailler selon la pratique habituelle sous Mercurial
|
JeanMarieClement@974
|
111 avec une arborescence qui ne contient qu'une seule branche, vous pouvez cloner
|
JeanMarieClement@974
|
112 cette seule branche en utilisant
|
belaran@970
|
113 <command>hg clone -r nomdemabranche</command>.</para>
|
bos@693
|
114 </sect2>
|
bos@693
|
115
|
bos@686
|
116 <sect2>
|
belaran@970
|
117 <title>Associer les noms d'utilisateurs</title>
|
belaran@970
|
118
|
JeanMarieClement@974
|
119 <para id="x_6f0">Certains outils de gestion de révisions
|
JeanMarieClement@974
|
120 ne sauvegardent, avec les modifications, que les noms
|
JeanMarieClement@974
|
121 d'utilisateurs raccourcis. Ceux-ci peuvent être difficiles à
|
JeanMarieClement@974
|
122 interpréter. La norme avec Mercurial est de sauvegarder le
|
JeanMarieClement@974
|
123 nom du <emphasis remap="it">committeur</emphasis> et son adresse
|
belaran@970
|
124 mail, ce qui est beaucoup plus utile pour discuter avec lui
|
belaran@970
|
125 par la suite.</para>
|
belaran@970
|
126
|
belaran@970
|
127 <para id="x_6f1">Si vous convertissez une arborescence depuis
|
JeanMarieClement@974
|
128 un gestionnaire de révisions qui utilise seulement les noms
|
JeanMarieClement@974
|
129 raccourcis, vous pouvez associer ces noms à des équivalents
|
belaran@970
|
130 plus détaillés en passant l'option <option>--authors</option>
|
belaran@970
|
131 à la commande <command>hg convert</command>. Cette option
|
JeanMarieClement@974
|
132 attend un fichier qui contient des entrées sous la forme suivante:
|
belaran@970
|
133 </para>
|
bos@686
|
134
|
bos@686
|
135 <programlisting>arist = Aristotle <aristotle@phil.example.gr>
|
bos@686
|
136 soc = Socrates <socrates@phil.example.gr></programlisting>
|
bos@686
|
137
|
belaran@970
|
138 <para id="x_6f2">Quand <literal>convert</literal> trouve une
|
JeanMarieClement@974
|
139 modification associée au nom <literal>arist</literal> dans le
|
belaran@970
|
140 dépôt de source, il va utiliser le nom <literal>Aristotle
|
belaran@970
|
141 <aristotle@phil.example.gr></literal> dans les révisions
|
belaran@970
|
142 Mercurial. Si aucune correspondance n'est trouvé, il utilise
|
belaran@970
|
143 le nom tel quel.</para>
|
bos@686
|
144 </sect2>
|
bos@686
|
145
|
bos@686
|
146 <sect2 id="svn.filemap">
|
belaran@970
|
147 <title>Nettoyer l'arboresence</title>
|
belaran@970
|
148
|
JeanMarieClement@974
|
149 <para id="x_6f3">Tous les projets n'ont pas un historique parfait.
|
JeanMarieClement@974
|
150 Il peut y avoir des répertoires qui n'auraient jamais dû être ajoutés,
|
JeanMarieClement@974
|
151 un fichier qui est trop volumineux, ou même une partie de la
|
JeanMarieClement@974
|
152 hiérarchie qui devrait être réorganisée.</para>
|
belaran@970
|
153
|
belaran@970
|
154 <para id="x_6f4">L'extension <literal>convert</literal> permet
|
belaran@970
|
155 d'utiliser un <quote>fichier d'association</quote> qui peut
|
JeanMarieClement@974
|
156 réorganiser les fichiers et les répertoires dans un projet lors de
|
JeanMarieClement@974
|
157 l'importation de son historique. Ceci est utile non seulement quand vous
|
belaran@970
|
158 importez l'historique d'un autre gestionnaire de révisions, mais
|
JeanMarieClement@974
|
159 aussi pour nettoyer ou réorganiser l'arborescence d'un projet
|
belaran@970
|
160 Mercurial.</para>
|
belaran@970
|
161
|
belaran@970
|
162 <para id="x_6f5">Pour indiquer le fichier d'association, on utilise
|
JeanMarieClement@974
|
163 l'option <option>--filemap</option> en lui fournissant un nom de
|
belaran@970
|
164 fichier. Le fichier d'association contient des lignes de la forme
|
youshe@984
|
165 suivante :</para>
|
belaran@970
|
166
|
belaran@970
|
167 <programlisting># Ceci est un commentaire.
|
belaran@970
|
168 # Les lignes vides sont ignorées.
|
bos@686
|
169
|
bos@686
|
170 include path/to/file
|
bos@686
|
171
|
bos@686
|
172 exclude path/to/file
|
bos@686
|
173
|
bos@686
|
174 rename from/some/path to/some/other/place
|
bos@686
|
175 </programlisting>
|
JeanMarieClement@974
|
176
|
JeanMarieClement@974
|
177 <para id="x_6f6">La directive <literal>include</literal> inclut un
|
belaran@970
|
178 fichier, ou l'ensemble des fichiers d'un répertoire, dans le dépôt
|
belaran@970
|
179 de destination. La directive <literal>exclude</literal> omet les
|
belaran@970
|
180 fichiers ou répertoires du dépôt. Ceci inclut aussi les autres
|
belaran@970
|
181 fichiers et répertoires qui ne sont pas explicitement inclus.
|
belaran@970
|
182 La directive <literal>exclude</literal> entraine l'omission
|
JeanMarieClement@974
|
183 des fichiers ou répertoires, et autres fichiers qui ne sont pas
|
belaran@970
|
184 explicitement inclus.</para>
|
belaran@970
|
185
|
belaran@970
|
186 <para id="x_6f7">Pour déplacer un fichier ou un répertoire d'un
|
JeanMarieClement@974
|
187 emplacement à un autre, utilisez la directive
|
belaran@970
|
188 <literal>rename</literal>. Si vous avez besoin de déplacer un
|
JeanMarieClement@974
|
189 fichier ou un répertoire depuis un sous répertoire dans la racine
|
belaran@970
|
190 du dépôt, utilisez <literal>.</literal> comme second argument de
|
belaran@970
|
191 la directive <literal>rename</literal>.</para>
|
bos@686
|
192 </sect2>
|
bos@693
|
193
|
bos@693
|
194 <sect2>
|
JeanMarieClement@974
|
195 <title>Améliorer les performances de la conversion Subversion</title>
|
belaran@970
|
196
|
belaran@970
|
197 <para id="x_70b">Vous aurez souvent besoin de plusieurs essais
|
JeanMarieClement@974
|
198 avant d'arriver à la parfaite combinaison de fichier d'association de fichiers,
|
youshe@984
|
199 de fichier d'association de noms d'utilisateurs et des autres paramètres. Or,
|
youshe@984
|
200 convertir un dépôt Mercurial via un protocole comme <literal>ssh</literal>
|
JeanMarieClement@974
|
201 ou <literal>http</literal> peut être des milliers de fois plus long
|
belaran@970
|
202 que ce dont le système d'exploitation est en fait capable de faire,
|
belaran@970
|
203 à cause des latence réseau. Ceci peut rendre la conception de cette
|
belaran@970
|
204 combinaison parfaite très douloureuse.</para>
|
belaran@970
|
205
|
belaran@970
|
206 <para id="x_70c">La commande <ulink
|
bos@693
|
207 url="http://svn.collab.net/repos/svn/trunk/notes/svnsync.txt"><command>svnsync</command></ulink>
|
belaran@970
|
208 peut grandement améliorer la vitesse de conversion d'un dépôt
|
belaran@970
|
209 Subversion. Il s'agit d'un programme de miroir de dépôt Subversion
|
belaran@970
|
210 en lecture seule. L'idée est de créer un miroir local d'une
|
JeanMarieClement@974
|
211 arborescence Subversion, puis de convertir ce miroir en dépôt
|
belaran@970
|
212 Mercurial.</para>
|
belaran@970
|
213
|
belaran@970
|
214 <para id="x_70d">Supposez que nous voulions convertir le dépôt
|
youshe@984
|
215 Subversion du populaire projet Memcached en une arborescence Mercurial.
|
JeanMarieClement@974
|
216 Tout d'abord, nous créons un dépôt Subversion local.</para>
|
bos@693
|
217
|
bos@693
|
218 <screen><prompt>$</prompt> <userinput>svnadmin create memcached-mirror</userinput></screen>
|
bos@693
|
219
|
JeanMarieClement@974
|
220 <para id="x_70e">Puis, nous allons mettre en place un <quote>hook</quote> Subversion
|
belaran@970
|
221 dont <command>svnsync</command> a besoin.</para>
|
bos@693
|
222
|
bos@693
|
223 <screen><prompt>$</prompt> <userinput>echo '#!/bin/sh' > memcached-mirror/hooks/pre-revprop-change</userinput>
|
bos@693
|
224 <prompt>$</prompt> <userinput>chmod +x memcached-mirror/hooks/pre-revprop-change</userinput></screen>
|
bos@693
|
225
|
JeanMarieClement@974
|
226 <para id="x_70f">Nous initialisons ensuite <command>svnsync</command> dans ce
|
belaran@970
|
227 dépôt.</para>
|
bos@693
|
228
|
bos@693
|
229 <screen><prompt>$</prompt> <userinput>svnsync --init file://`pwd`/memcached-mirror \
|
bos@693
|
230 http://code.sixapart.com/svn/memcached</userinput></screen>
|
bos@693
|
231
|
belaran@970
|
232 <para id="x_710">La prochaine étape est de commencer le processus de
|
JeanMarieClement@974
|
233 mirroring de <command>svnsync</command>.</para>
|
bos@693
|
234
|
bos@693
|
235 <screen><prompt>$</prompt> <userinput>svnsync sync file://`pwd`/memcached-mirror</userinput></screen>
|
bos@693
|
236
|
belaran@970
|
237 <para id="x_711">Enfin, nous importons l'historique de notre dépôt
|
belaran@970
|
238 local Subversion dans Mercurial.</para>
|
bos@693
|
239
|
bos@693
|
240 <screen><prompt>$</prompt> <userinput>hg convert memcached-mirror</userinput></screen>
|
bos@693
|
241
|
belaran@970
|
242 <para id="x_712">Nous pouvons utiliser ce processus de manière
|
belaran@970
|
243 incrémentale, si le dépôt Subversion est toujours en activité.
|
belaran@970
|
244 Il suffit d'exécuter de nouveau <command>svnsync</command> pour
|
JeanMarieClement@974
|
245 récupérer les récentes modifications dans notre miroir, puis <command>hg
|
JeanMarieClement@974
|
246 convert</command>
|
youshe@984
|
247 les importe dans notre arborescence Mercurial.</para>
|
belaran@970
|
248
|
belaran@970
|
249 <para id="x_713">Il y a deux avantages à utiliser un import à deux
|
JeanMarieClement@974
|
250 étages comme avec <command>svnsync</command>. Le premier
|
JeanMarieClement@974
|
251 est qu'il utilise du code de synchronisation réseau de Subversion
|
JeanMarieClement@974
|
252 plus efficace que la commande <command>hg convert</command>,
|
JeanMarieClement@974
|
253 et donc transfère moins de données par le réseau. Le deuxième
|
JeanMarieClement@974
|
254 est que l'import depuis un dépôt Subversion local est si rapide que
|
JeanMarieClement@974
|
255 vous pouvez peaufiner et réitérer les paramètres de conversion de
|
youshe@984
|
256 ce dernier sans souffrir de la qualité de la connexion réseau.</para>
|
bos@693
|
257 </sect2>
|
bos@686
|
258 </sect1>
|
bos@686
|
259
|
bos@686
|
260 <sect1>
|
JeanMarieClement@974
|
261 <title>Migrer depuis Subversion</title>
|
JeanMarieClement@974
|
262
|
JeanMarieClement@974
|
263 <para id="x_6f8">Subversion est le système de gestion de versions
|
JeanMarieClement@974
|
264 open source le plus populaire aujourd'hui. Bien qu'il y ait des
|
belaran@970
|
265 différences entre Mercurial et Subversion, faire la transition de
|
belaran@970
|
266 l'un à l'autre n'est pas très difficile. Les deux disposent en effet
|
JeanMarieClement@974
|
267 de jeux de commandes similaires et d'interfaces similaires.</para>
|
bos@686
|
268
|
bos@686
|
269 <sect2>
|
belaran@970
|
270 <title>Différences philosophiques</title>
|
belaran@970
|
271
|
belaran@970
|
272 <para id="x_6f9">La différence fondamentale entre Subversion et
|
belaran@970
|
273 Mercurial est bien évidement que Subversion est centralisé, alors
|
belaran@970
|
274 que Mercurial est distribué. Puisque que Mercurial enregistre tout
|
belaran@970
|
275 l'historique d'un projet sur votre disque dur local, il n'a besoin
|
JeanMarieClement@974
|
276 d'effectuer des accès au réseau que lorsque vous voulez
|
JeanMarieClement@974
|
277 explicitement communiquer avec un autre dépôt. Subversion, par contre,
|
youshe@984
|
278 ne conserve que peu d'informations localement, et le client
|
JeanMarieClement@974
|
279 doit donc communiquer avec le serveur central pour la
|
belaran@970
|
280 plupart des opérations communes.</para>
|
belaran@970
|
281
|
JeanMarieClement@974
|
282 <para id="x_6fa">Subversion s'en tire plus ou moins bien sans notion
|
JeanMarieClement@974
|
283 de branche réellement bien définie : quelle portion de l'espace de nommage
|
belaran@970
|
284 du serveur est une branche est une simple question de convention, le
|
JeanMarieClement@974
|
285 logiciel n'imposant rien à ce sujet. Mercurial considère
|
JeanMarieClement@974
|
286 un dépôt comme un élément de la gestion des branches.</para>
|
belaran@970
|
287
|
bos@686
|
288 <sect3>
|
belaran@970
|
289 <title>Portée des commandes</title>
|
belaran@970
|
290
|
belaran@970
|
291 <para id="x_6fb">Puisque que Subversion ne sait pas réellement
|
belaran@970
|
292 quelle partie de son espace de nommage est en fait une branche, il
|
belaran@970
|
293 traite la plupart des commandes comme des requêtes à exécuter sur le
|
belaran@970
|
294 répertoire où vous vous situez, et ses sous répertoires. Par exemple,
|
JeanMarieClement@978
|
295 si vous exécutez <command>svn log</command>, vous verrez l'historique
|
youshe@984
|
296 de la partie de l'arborescence où vous vous situez, et non de la
|
belaran@970
|
297 hiérarchie entière.</para>
|
belaran@970
|
298
|
belaran@970
|
299 <para id="x_6fc">Les commandes de Mercurial ont un comportement
|
youshe@984
|
300 différent : toutes les commandes s'appliquent à l'ensemble de l'arborescence
|
belaran@970
|
301 du dépôt. Exécutez la commande <command>hg log</command> et elle vous
|
youshe@984
|
302 donnera l'historique de l'ensemble de l'arborescence, quel que soit le
|
JeanMarieClement@978
|
303 sous-répertoire où vous vous situez. Si
|
JeanMarieClement@978
|
304 vous souhaitez obtenir l'historique d'un répertoire ou seulement d'un
|
JeanMarieClement@978
|
305 fichier, ajouter simplement le nom de celui-ci à la commande, par
|
JeanMarieClement@978
|
306 exemple <command>hg log src</command>.</para>
|
belaran@970
|
307
|
belaran@970
|
308 <para id="x_6fd">De ma propre expérience, cette différence dans leur
|
youshe@984
|
309 comportement par défaut est probablement ce qui risque de vous
|
youshe@984
|
310 surprendre le plus si vous passez régulièrement d'un outil à l'autre.</para>
|
bos@686
|
311 </sect3>
|
bos@686
|
312
|
bos@686
|
313 <sect3>
|
belaran@970
|
314 <title>Opération multi utilisateur et sécurité</title>
|
belaran@970
|
315
|
belaran@970
|
316 <para id="x_6fe">Avec Subversion, il est normal (bien que légèrement
|
JeanMarieClement@978
|
317 désapprouvé) que différentes personnes collaborent sur une seule
|
belaran@970
|
318 branche. Si Alice et Bob travaillent ensemble, et Alice ajoute ses
|
youshe@984
|
319 modifications à leur branche partagée, Bob doit alors mettre à jour
|
JeanMarieClement@978
|
320 sa vue de la branche avant de pouvoir appliquer un commit.
|
JeanMarieClement@978
|
321 Puisqu'il n'a, à ce moment, pas effectué de commit
|
JeanMarieClement@978
|
322 des modifications qu'il a faites, il se peut qu'il ne corrompe
|
JeanMarieClement@978
|
323 ou ne perde
|
JeanMarieClement@978
|
324 ses modifications pendant ou après la mise à jour.</para>
|
belaran@970
|
325
|
belaran@970
|
326 <para id="x_6ff">Mercurial encourage, à l'inverse, un modèle
|
JeanMarieClement@978
|
327 "commit-puis-merge". Avant de récupérer des modifications depuis le
|
JeanMarieClement@978
|
328 serveur, ou avant d'y envoyer les siennes, Bob enregistre ses
|
JeanMarieClement@978
|
329 modifications de manière locale en appliquant un commit. C'est à dire
|
JeanMarieClement@978
|
330 que si Alice avait envoyé ses modifications sur le serveur avant
|
JeanMarieClement@978
|
331 que Bob n'envoie les siennes, ce dernier ne pourra le faire
|
JeanMarieClement@978
|
332 qu'après avoir récupéré et fusionné celles d'Alice avec les siennes.
|
JeanMarieClement@978
|
333 Si Bob fait alors une
|
JeanMarieClement@978
|
334 erreur lors de la fusion, il pourra toujours restaurer sa version, pour
|
JeanMarieClement@978
|
335 laquelle il avait appliqué le commit.</para>
|
belaran@970
|
336
|
belaran@970
|
337 <para id="x_700">Il est important de souligner qu'il s'agit de la
|
JeanMarieClement@978
|
338 manière habituelle de travailler avec ces outils. Subversion propose
|
JeanMarieClement@978
|
339 une manière plus sûre de "travailler-dans-votre-propre-branche", mais elle
|
JeanMarieClement@978
|
340 est assez complexe pour que, en pratique, elle ne soit que rarement utilisé.
|
JeanMarieClement@978
|
341 Mercurial propose de son côté un mode un peu moins sûr, permettant de
|
belaran@970
|
342 récupérer des modifications par dessus des modifications non
|
youshe@984
|
343 committées, qui reste toutefois très peu répandu.</para>
|
bos@686
|
344 </sect3>
|
bos@686
|
345
|
bos@686
|
346 <sect3>
|
belaran@970
|
347 <title>Publication vs changement locaux</title>
|
belaran@970
|
348
|
belaran@970
|
349 <para id="x_701">Une commande Subversion <command>svn
|
belaran@970
|
350 commit</command> publie immédiatement les modifications sur le
|
JeanMarieClement@978
|
351 serveur, où elles peuvent être vu par n'importe qui doté d'un privilège
|
belaran@970
|
352 de lecture.</para>
|
belaran@970
|
353
|
JeanMarieClement@978
|
354 <para id="x_702">Avec Mercurial, les modifications sont toujours d'abord
|
JeanMarieClement@978
|
355 enregistrées localement, et doivent être par la suite transférés par
|
belaran@970
|
356 la commande <command>hg push</command>.</para>
|
belaran@970
|
357
|
youshe@984
|
358 <para id="x_703">Chaque approche a ses avantages et ses inconvénients.
|
JeanMarieClement@978
|
359 Le modèle Subversion implique que les modifications soient publiées, et
|
JeanMarieClement@978
|
360 donc disponibles immédiatement. D'un autre coté, cela implique aussi
|
JeanMarieClement@978
|
361 que, pour pouvoir utiliser le logiciel normalement, un utilisateur doit
|
JeanMarieClement@978
|
362 avoir les droits d'écriture dans le dépôt, et ce privilège n'est pas concédé
|
JeanMarieClement@978
|
363 facilement par la plupart des projets Open Source.</para>
|
belaran@970
|
364
|
youshe@984
|
365 <para id="x_704">L'approche de Mercurial permet à quiconque de faire
|
belaran@970
|
366 un clone du dépôt et d'y ajouter ses modifications sans jamais avoir
|
youshe@984
|
367 besoin de la permission de quiconque, et l'on peut même publier ses
|
JeanMarieClement@978
|
368 modifications et continuer à participer comme on le désire. Toutefois, la
|
JeanMarieClement@978
|
369 distinction entre les commits et le transfert de ces derniers présente
|
JeanMarieClement@978
|
370 le risque que quelqu'un applique ses modifications par un commit local
|
JeanMarieClement@978
|
371 sur son portable et parte se promener pendant quelques jours en ayant
|
JeanMarieClement@978
|
372 oublié de les transférer, ce qui peut, dans certains rares cas,
|
JeanMarieClement@978
|
373 bloquer temporairement ses collaborateurs.</para>
|
bos@686
|
374 </sect3>
|
bos@686
|
375 </sect2>
|
bos@686
|
376
|
bos@686
|
377 <sect2>
|
belaran@970
|
378 <title>Références des commandes</title>
|
bos@686
|
379
|
bos@686
|
380 <table>
|
belaran@970
|
381 <title>Commandes Subversion et leurs équivalents Mercurial</title>
|
bos@686
|
382 <tgroup cols="3">
|
bos@686
|
383 <thead>
|
bos@686
|
384 <row>
|
bos@686
|
385 <entry>Subversion</entry>
|
bos@686
|
386 <entry>Mercurial</entry>
|
bos@686
|
387 <entry>Notes</entry>
|
bos@686
|
388 </row>
|
bos@686
|
389 </thead>
|
bos@686
|
390 <tbody>
|
bos@686
|
391 <row>
|
bos@686
|
392 <entry><command>svn add</command></entry>
|
bos@686
|
393 <entry><command>hg add</command></entry>
|
bos@686
|
394 <entry></entry>
|
bos@686
|
395 </row>
|
bos@686
|
396 <row>
|
bos@686
|
397 <entry><command>svn blame</command></entry>
|
bos@686
|
398 <entry><command>hg annotate</command></entry>
|
bos@686
|
399 <entry></entry>
|
bos@686
|
400 </row>
|
bos@686
|
401 <row>
|
bos@686
|
402 <entry><command>svn cat</command></entry>
|
bos@686
|
403 <entry><command>hg cat</command></entry>
|
bos@686
|
404 <entry></entry>
|
bos@686
|
405 </row>
|
bos@686
|
406 <row>
|
bos@686
|
407 <entry><command>svn checkout</command></entry>
|
bos@686
|
408 <entry><command>hg clone</command></entry>
|
bos@686
|
409 <entry></entry>
|
bos@686
|
410 </row>
|
bos@686
|
411 <row>
|
bos@686
|
412 <entry><command>svn cleanup</command></entry>
|
bos@686
|
413 <entry>n/a</entry>
|
belaran@970
|
414 <entry>Aucun nettoyage nécessaire.</entry>
|
bos@686
|
415 </row>
|
bos@686
|
416 <row>
|
bos@686
|
417 <entry><command>svn commit</command></entry>
|
bos@686
|
418 <entry><command>hg commit</command>; <command>hg
|
bos@686
|
419 push</command></entry>
|
belaran@970
|
420 <entry><command>hg push</command> publie les modifications
|
JeanMarieClement@978
|
421 après un commit.</entry>
|
bos@686
|
422 </row>
|
bos@686
|
423 <row>
|
bos@686
|
424 <entry><command>svn copy</command></entry>
|
bos@686
|
425 <entry><command>hg clone</command></entry>
|
belaran@970
|
426 <entry>Pour créer une nouvelle branche</entry>
|
bos@686
|
427 </row>
|
bos@686
|
428 <row>
|
bos@686
|
429 <entry><command>svn copy</command></entry>
|
bos@686
|
430 <entry><command>hg copy</command></entry>
|
belaran@970
|
431 <entry>Pour copier des fichiers ou des répertoires</entry>
|
bos@686
|
432 </row>
|
bos@686
|
433 <row>
|
bos@686
|
434 <entry><command>svn delete</command> (<command>svn
|
bos@686
|
435 remove</command>)</entry>
|
bos@686
|
436 <entry><command>hg remove</command></entry>
|
bos@686
|
437 <entry></entry>
|
bos@686
|
438 </row>
|
bos@686
|
439 <row>
|
bos@686
|
440 <entry><command>svn diff</command></entry>
|
bos@686
|
441 <entry><command>hg diff</command></entry>
|
bos@686
|
442 <entry></entry>
|
bos@686
|
443 </row>
|
bos@686
|
444 <row>
|
bos@686
|
445 <entry><command>svn export</command></entry>
|
bos@686
|
446 <entry><command>hg archive</command></entry>
|
bos@686
|
447 <entry></entry>
|
bos@686
|
448 </row>
|
bos@686
|
449 <row>
|
bos@686
|
450 <entry><command>svn help</command></entry>
|
bos@686
|
451 <entry><command>hg help</command></entry>
|
bos@686
|
452 <entry></entry>
|
bos@686
|
453 </row>
|
bos@686
|
454 <row>
|
bos@686
|
455 <entry><command>svn import</command></entry>
|
bos@686
|
456 <entry><command>hg addremove</command>; <command>hg
|
bos@686
|
457 commit</command></entry>
|
bos@686
|
458 <entry></entry>
|
bos@686
|
459 </row>
|
bos@686
|
460 <row>
|
bos@686
|
461 <entry><command>svn info</command></entry>
|
bos@686
|
462 <entry><command>hg parents</command></entry>
|
JeanMarieClement@978
|
463 <entry>Affiche la version sur la base de laquelle on travaille</entry>
|
bos@686
|
464 </row>
|
bos@686
|
465 <row>
|
bos@686
|
466 <entry><command>svn info</command></entry>
|
bos@686
|
467 <entry><command>hg showconfig
|
JeanMarieClement@978
|
468 paths.default</command></entry>
|
belaran@970
|
469 <entry>Affiche de quelle URL est extrait ce dépôt</entry>
|
bos@686
|
470 </row>
|
bos@686
|
471 <row>
|
bos@686
|
472 <entry><command>svn list</command></entry>
|
bos@686
|
473 <entry><command>hg manifest</command></entry>
|
bos@686
|
474 <entry></entry>
|
bos@686
|
475 </row>
|
bos@686
|
476 <row>
|
bos@686
|
477 <entry><command>svn log</command></entry>
|
bos@686
|
478 <entry><command>hg log</command></entry>
|
bos@686
|
479 <entry></entry>
|
bos@686
|
480 </row>
|
bos@686
|
481 <row>
|
bos@686
|
482 <entry><command>svn merge</command></entry>
|
bos@686
|
483 <entry><command>hg merge</command></entry>
|
bos@686
|
484 <entry></entry>
|
bos@686
|
485 </row>
|
bos@686
|
486 <row>
|
bos@686
|
487 <entry><command>svn mkdir</command></entry>
|
bos@686
|
488 <entry>n/a</entry>
|
belaran@970
|
489 <entry>Mercurial ne versionne pas les répertoires</entry>
|
bos@686
|
490 </row>
|
bos@686
|
491 <row>
|
bos@686
|
492 <entry><command>svn move</command> (<command>svn
|
bos@686
|
493 rename</command>)</entry>
|
bos@686
|
494 <entry><command>hg rename</command></entry>
|
bos@686
|
495 <entry></entry>
|
bos@686
|
496 </row>
|
bos@686
|
497 <row>
|
bos@686
|
498 <entry><command>svn resolved</command></entry>
|
bos@686
|
499 <entry><command>hg resolve -m</command></entry>
|
bos@686
|
500 <entry></entry>
|
bos@686
|
501 </row>
|
bos@686
|
502 <row>
|
bos@686
|
503 <entry><command>svn revert</command></entry>
|
bos@686
|
504 <entry><command>hg revert</command></entry>
|
bos@686
|
505 <entry></entry>
|
bos@686
|
506 </row>
|
bos@686
|
507 <row>
|
bos@686
|
508 <entry><command>svn status</command></entry>
|
bos@686
|
509 <entry><command>hg status</command></entry>
|
bos@686
|
510 <entry></entry>
|
bos@686
|
511 </row>
|
bos@686
|
512 <row>
|
bos@686
|
513 <entry><command>svn update</command></entry>
|
bos@686
|
514 <entry><command>hg pull -u</command></entry>
|
bos@686
|
515 <entry></entry>
|
bos@686
|
516 </row>
|
bos@686
|
517 </tbody>
|
bos@686
|
518 </tgroup>
|
bos@686
|
519 </table>
|
bos@686
|
520 </sect2>
|
bos@686
|
521 </sect1>
|
bos@686
|
522
|
bos@686
|
523 <sect1>
|
belaran@970
|
524 <title>Conseils utiles pour les débutants</title>
|
belaran@970
|
525
|
JeanMarieClement@978
|
526 <para id="x_705">Avec la plupart des gestionnaire de versions, afficher
|
belaran@970
|
527 un diff associé à une révision peut être assez douloureux. Par exemple,
|
belaran@970
|
528 avec Subversion, pour voir ce qui a été modifiée dans la révision 104654,
|
belaran@970
|
529 vous devez saisir <command>svn diff -r104653:104654</command>. Mercurial
|
belaran@970
|
530 élimine le besoin de saisir l'identifiant d'une révision deux fois dans
|
belaran@970
|
531 ce cas classique. Pour un simple diff, <command>hg
|
JeanMarieClement@978
|
532 export 104654</command> suffit. Pour obtenir une entrée du journal suivie d'un diff,
|
JeanMarieClement@978
|
533 <command>hg log -r104654 -p</command>.</para>
|
belaran@970
|
534
|
belaran@970
|
535 <para id="x_706">Quand vous exécutez la commande <command>hg status</command>
|
youshe@985
|
536 sans aucun argument, elle affiche l'état de l'ensemble de l'arborescence,
|
youshe@984
|
537 avec des chemins relatifs partant de la racine du dépôt. Ceci rend
|
belaran@970
|
538 difficile de copier un nom de fichier depuis la sortie de la commande
|
belaran@970
|
539 <command>hg status</command> dans une autre ligne de commande. Si vous
|
belaran@970
|
540 fournissez un fichier ou un répertoire à la commande <command>hg
|
belaran@970
|
541 status</command>, elle va afficher les chemins relatif depuis votre
|
belaran@970
|
542 répertoire courant à la place. Ainsi, pour avoir un état sur l'ensemble
|
youshe@984
|
543 de l'arborescence à l'aide de <command>hg status</command>, avec des
|
youshe@984
|
544 chemins relatifs à votre répertoire courant, et non la racine du dépôt,
|
belaran@970
|
545 ajoutez la sortie de <command>hg root</command> à la commande
|
belaran@970
|
546 <command>hg status</command>. Vous pouvez le faire aisément sur un
|
belaran@970
|
547 système Unix ainsi :</para>
|
bos@686
|
548
|
bos@686
|
549 <screen><prompt>$</prompt> <userinput>hg status `hg root`</userinput></screen>
|
bos@686
|
550 </sect1>
|
bos@559
|
551 </appendix>
|
bos@559
|
552
|
bos@559
|
553 <!--
|
bos@559
|
554 local variables:
|
bos@559
|
555 sgml-parent-document: ("00book.xml" "book" "appendix")
|
bos@559
|
556 end:
|
bos@559
|
557 -->
|