hgbook

annotate fr/ch05-daily.xml @ 989:a3a9eabfe2a4

French translation : ch05-daily translated
author Frédéric Bouquet <youshe.jaalon@gmail.com>
date Thu Sep 10 13:06:34 2009 +0200 (2009-09-10)
parents 72de97557f11
children b4ff7b04efdc
rev   line source
bos@559 1 <!-- vim: set filetype=docbkxml shiftwidth=2 autoindent expandtab tw=77 : -->
bos@559 2
bos@685 3 <chapter id="chap:daily">
bos@572 4 <?dbhtml filename="mercurial-in-daily-use.html"?>
bos@559 5 <title>Mercurial in daily use</title>
bos@559 6
bos@559 7 <sect1>
bos@559 8 <title>Telling Mercurial which files to track</title>
bos@559 9
youshe@988 10 <para id="x_1a3">Mercurial ne fonctionne pas avec les fichiers de votre
youshe@988 11 dépôt tant que vous ne lui avez pas dit de les gérer. La commande
youshe@988 12 <command role="hg-cmd">hg status</command> vous dira quels fichier sont
youshe@988 13 inconnus de Mercurial. Il utilise un
youshe@988 14 <quote><literal>?</literal></quote> pour montrer ces fichiers.</para>
youshe@988 15
youshe@988 16 <para id="x_1a4">Pour informer Mercurial de suivre un fichier, utilisez
youshe@988 17 la commande <command role="hg-cmd">hg add</command>. Une fois que vous
youshe@988 18 avez ajouté un fichier, la ligne correspondante à ce fichier dans la
youshe@988 19 sortie de <command role="hg-cmd">hg status</command> change de
youshe@988 20 <quote><literal>?</literal></quote> à
bos@567 21 <quote><literal>A</literal></quote>.</para>
bos@567 22
youshe@988 23 &interaction.daily.files.add;
youshe@988 24
youshe@988 25 <para id="x_1a5">Après avoir exécuté un <command role="hg-cmd">hg
youshe@988 26 commit</command>, les fichiers que vous avez ajouté avant le commit
youshe@988 27 ne seront plus listé dans la sortie de <command role="hg-cmd">hg
youshe@988 28 status</command>. La raison de ceci est que par défaut, <command
youshe@988 29 role="hg-cmd">hg status</command> ne vous montre que les fichiers
youshe@988 30 <quote>intéressants</quote> &emdash;ceux que vous avez (par exemple)
youshe@988 31 modifiés, supprimés ou renommés. Si vous avez un dépôt qui contient un
youshe@988 32 millier de fichiers, vous ne voudrez certainement que rarement entendre
youshe@988 33 parler des fichiers que Mercurial suit, mais qui n'ont pas changés.
youshe@988 34 (Vous pouvez quand même avoir cette information, nous y reviendrons
youshe@988 35 plus tard.)</para>
youshe@988 36
youshe@988 37 <para id="x_1a6">Une fois que vous ajoutez un fichier, Mercurial ne fait
youshe@988 38 rien du tout avec celui-ci immédiatement. A lieu de ça, il va prendre
youshe@988 39 un "snapshot" de l'état du fichier la prochaine fois que vous
youshe@988 40 exécuterez un commit. Il continuera ensuite à suivre les changements
youshe@988 41 que vous avez fait au fichier chaque fois que vous committerez, jusqu'à
youshe@988 42 ce que vous supprimiez le fichier.</para>
youshe@988 43
youshe@988 44 <sect2>
youshe@988 45 <title>Nommage des fichiers explicite versus implicite</title>
youshe@988 46
youshe@988 47 <para id="x_1a7">Un comportement utile que Mercurial possède est que si
youshe@988 48 vous passez le nom d'un répertoire à une commande, toute commande
youshe@988 49 Mercurial la traitera comme <quote>Je veux opérer sur chaque fichier
youshe@988 50 dans ce répertoire et ses sous-répertoires</quote>.</para>
bos@567 51
bos@567 52 &interaction.daily.files.add-dir;
bos@567 53
youshe@988 54 <para id="x_1a8">Remarquez que dans cet exemple, Mercurial affiche le
youshe@988 55 nom des fichiers qu'il a ajouté, alors qu'il ne l'a pas fait lorsque
youshe@988 56 nous avons ajouté le fichier nommé <filename>myfile.txt</filename>
youshe@988 57 dans l'exemple précédent.</para>
youshe@988 58
youshe@988 59 <para id="x_1a9">Ce qu'il se passe est que dans le premier cas, nous
youshe@988 60 avons nommé explicitement le fichier à ajouter sur la ligne de
youshe@988 61 commande. La supposition que Mercurial fait dans ces cas est que nous
youshe@988 62 savons ce que nous faisons, il n'affiche dont rien en sortie.</para>
youshe@988 63
youshe@988 64 <para id="x_1aa">Cependant, lorsque nous avons
youshe@988 65 <emphasis>implicitement</emphasis> donné les fichiers à l'aide du nom
youshe@988 66 d'un répertoire, Mercurial prend le l'initiative d'afficher le nom de
youshe@988 67 chaque fichier avec lequel il fait quelque chose. Ceci clarifie ce
youshe@988 68 qu'il se passe, et réduit la probabilité d'une surprise silencieuse
youshe@988 69 et désagréable. Ce comportement est commun à la plupart des commandes
youshe@988 70 Mercurial.</para>
youshe@988 71 </sect2>
youshe@988 72 <sect2>
youshe@988 73 <title>Mercurial suit les fichiers, pas les répertoires</title>
youshe@988 74
youshe@988 75 <para id="x_1ab">Mercurial ne suit pas les informations sur les
youshe@988 76 répertoire. En contrepartie, il suit le chemin vers un fichier. Avant
youshe@988 77 de créer un fichier, il crée au préalable les répertoires manquants
youshe@988 78 dans le chemin. Après avoir supprimé un fichier, il supprime chaque
youshe@988 79 répertoire vide qui apparaît dans le chemin du fichier. Ceci apparaît
youshe@988 80 comme une distinction triviale, cependant, ceci a une conséquence
youshe@988 81 pratique mineure : il n'est pas possible de représenter un répertoire
youshe@988 82 totalement vide dans Mercurial.</para>
youshe@988 83
youshe@988 84 <para id="x_1ac">Les répertoires vides sont rarement utiles. Il existe
youshe@988 85 des solutions alternatives et non intrusives que vous pouvez utiliser
youshe@988 86 pour obtenir l'effet approprié. Les développeurs de Mercurial ont
youshe@988 87 ainsi pensé que la complexité requise pour gérer les répertoires
youshe@988 88 n'était pas aussi importante que le bénéfice que cette fonctionnalité
youshe@988 89 apporterait.</para>
youshe@988 90
youshe@988 91 <para id="x_1ad">Si vous avez besoin d'un répertoire vide dans votre
youshe@988 92 dépôt, il existe quelques façons d'y arriver. L'une d'elles est de
youshe@988 93 créer un répertoire et d'ensuite, faire un <command role="hg-cmd">hg
youshe@988 94 add</command> sur un fichier <quote>hidden</quote> file dans ce
youshe@988 95 répertoire. Sur les fichiers de type Unix, tout fichier dont le nom
youshe@988 96 commence avec un point (<quote><literal>.</literal></quote>) est
youshe@988 97 considéré comme caché par la plupart des commandes et outils
youshe@988 98 graphiques. Cette approche est illustré ci-après.</para>
youshe@988 99
youshe@988 100 &interaction.daily.files.hidden;
youshe@988 101
youshe@988 102 <para id="x_1ae">Une autre façon de s'attaquer au besoin d'un
youshe@988 103 répertoire vide est de simplement en créer un dans vos scripts
youshe@988 104 de construction avant qu'ils n'en aient le besoin.</para>
bos@559 105 </sect2>
bos@559 106 </sect1>
bos@674 107
bos@559 108 <sect1>
youshe@988 109 <title>Comment arrêter de suivre un fichier</title>
youshe@988 110
youshe@988 111 <para id="x_1af">Une fois que vous décidez qu'un fichier n'appartient
youshe@988 112 plus à votre dépôt, utilisez la commande <command role="hg-cmd">hg
youshe@988 113 remove</command>. Ceci supprime le fichier et informe Mercurial
youshe@988 114 d'arrêter de le suivre (ce qui prendra effet lors du prochain commit).
youshe@988 115 Un fichier supprimé est représenté dans la sortie de la commande
youshe@988 116 <command role="hg-cmd">hg status</command> par un
bos@567 117 <quote><literal>R</literal></quote>.</para>
bos@567 118
bos@567 119 &interaction.daily.files.remove;
bos@559 120
youshe@988 121 <para id="x_1b0">Après avoir fait un <command role="hg-cmd">hg
youshe@988 122 remove</command> sur un fichier, Mercurial ne suivra plus aucun
youshe@988 123 changement sur ce fichier, même si vous recréez un fichier avec le même
youshe@988 124 nom dans le répertoire de travail. Si vous recréez un fichier avec le
youshe@988 125 même nom et que vous désirez que Mercurial suive ce dernier, faite
youshe@988 126 simplement un <command role="hg-cmd">hg add</command> sur celui-ci.
youshe@988 127 Mercurial saura alors que le nouveau fichier ne fait pas référence à
youshe@988 128 l'ancien fichier qui portait le même nom.</para>
youshe@988 129
youshe@988 130 <sect2>
youshe@988 131 <title>Supprimer un fichier n'affecte pas son historique</title>
youshe@988 132
youshe@988 133 <para id="x_1b1">Il est important de comprendre que supprmer un fichier
youshe@988 134 n'a que deux effets.</para>
youshe@988 135
bos@559 136 <itemizedlist>
youshe@988 137 <listitem><para id="x_1b2">Il supprime la version actuelle de ce
youshe@988 138 fichier du répertoire de travail.</para>
youshe@988 139 </listitem>
youshe@988 140 <listitem><para id="x_1b3">Il arrête, à partir du prochain commit, le
youshe@988 141 suivi de Mercurial sur les changements qui ont lieu sur ce
youshe@988 142 fichier.</para>
youshe@988 143 </listitem></itemizedlist>
youshe@988 144
youshe@988 145 <para id="x_1b4">Supprimer un fichier <emphasis>n'</emphasis>affecte en
youshe@988 146 <emphasis>aucun</emphasis> cas l'<emphasis>historique</emphasis> du
youshe@988 147 fichier.</para>
youshe@988 148
youshe@988 149 <para id="x_1b5">Si vous mettez à jour le répertoire de travail à un
youshe@988 150 changeset qui a été commité alors que le fichier que vous venez de
youshe@988 151 supprimer était encore suivi, ce fichier réaparaittra dans le
youshe@988 152 répertoire de travail, avec le contenu qu'il avait lorsque vous aviez
youshe@988 153 commité ce changeset. Si vous mettez à jour (update) le répertoire de
youshe@988 154 travail à un changeset ultérieur, dans lequel le fichier a été
youshe@988 155 supprimé, Mercurial supprimera une nouvelle fois le fichier du
youshe@988 156 répertoire de travail.</para>
youshe@988 157 </sect2>
youshe@988 158
youshe@988 159 <sect2>
youshe@988 160 <title>Fichier manquants</title>
youshe@988 161
youshe@988 162 <para id="x_1b6">Mercurial considère qu'un fichier que vous avez
youshe@988 163 supprimé sans utiliser<command role="hg-cmd">hg remove</command>
youshe@988 164 comme étant <emphasis>manquant</emphasis>. Un fichier manquant est
youshe@988 165 représenté avec un <quote><literal>!</literal></quote> en sortie de
youshe@988 166 <command role="hg-cmd">hg status</command>.
youshe@988 167 Les commandes Mercurial ne feront rien avec les fichiers
youshe@988 168 manquants.</para>
bos@567 169
bos@567 170 &interaction.daily.files.missing;
bos@559 171
youshe@988 172 <para id="x_1b7">Si votre dépôt contient un fichier que <command
youshe@988 173 role="hg-cmd">hg status</command> repporte comme manquant, et que
youshe@988 174 vous voulez que ce fichier reste supprimé, vous pouvez exécuter
youshe@988 175 <command role="hg-cmd">hg remove <option
youshe@988 176 role="hg-opt-remove">--after</option></command> à tout moment
youshe@988 177 pour dire à Mercurial que vous aviez bien voulu supprimer ce
youshe@988 178 fichier.</para>
bos@567 179
bos@567 180 &interaction.daily.files.remove-after;
bos@559 181
youshe@988 182 <para id="x_1b8">D'un autre coté, si vous avez supprimé le fichier
youshe@988 183 manquant par accident, donnez à la commande <command role="hg-cmd">hg
youshe@988 184 revert</command> le nom du fichier à retrouver. Il réaparaitra dans
youshe@988 185 sa forme non modifiée.</para>
bos@559 186
bos@674 187 &interaction.daily.files.recover-missing;
youshe@988 188
youshe@988 189 </sect2>
youshe@988 190
youshe@988 191 <sect2>
youshe@988 192 <title>Entre nous : Pourquoi dire explicitement à Mercurial de supprimer un
youshe@988 193 fichier ?</title>
youshe@988 194
youshe@988 195 <para id="x_1b9">Vous pourriez vous demander pourquoi il est nécessaire
youshe@988 196 de dire exprécement à Mercurial que vous souhaitez supprimer un
youshe@988 197 fichier. Au début du développement de Mercurial, celui ci vous
youshe@988 198 laissait pourtant supprimer un fichier sans soucis ; Mercurial vous
youshe@988 199 aurait automatiquement informé de l'absence du fichier lorsque vous
youshe@988 200 auriez lancé un <command role="hg-cmd">hg commit</command> et arrêté
youshe@988 201 de le suivre. En pratique, ceci a montré qu'il était trop facile de
youshe@988 202 supprimer accidentellement un fichier sans le remarquer.</para>
youshe@988 203 </sect2>
youshe@988 204
youshe@988 205 <sect2>
youshe@988 206 <title>Racourcis utile&emdash;ajouter et supprimer des fichiers en une
youshe@988 207 seule étape.</title>
youshe@988 208
youshe@988 209 <para id="x_1ba">Mercurial offre une commande combinée, <command
youshe@988 210 role="hg-cmd">hg addremove</command>, qui ajoute les fichiers non
youshe@988 211 suivis et marque les fichiers manquants comme supprimés.</para>
bos@567 212
bos@567 213 &interaction.daily.files.addremove;
bos@567 214
youshe@988 215 <para id="x_1bb">La commande <command role="hg-cmd">hg commit</command>
youshe@988 216 fournit aussi une option <option role="hg-opt-commit">-A</option> qui
youshe@988 217 exécute le même ajouter-et-supprimer, immédiatement suivi d'un
youshe@988 218 commit.</para>
bos@567 219
bos@567 220 &interaction.daily.files.commit-addremove;
youshe@988 221
bos@559 222 </sect2>
bos@559 223 </sect1>
bos@674 224
bos@701 225 <sect1 id="chap:daily.copy">
youshe@988 226 <title>Copier des fichiers</title>
youshe@988 227
youshe@988 228 <para id="x_1bc">Mercurial fournit une commande <command role="hg-cmd">hg
youshe@988 229 copy</command> qui vous permet de faire une nouvelle copie d'un
youshe@988 230 fichier. Lorsque vous copiez un fichier en utilisant cette commande,
youshe@988 231 Mercurial crée un enregistrement du fait que ce nouveau fichier est une
youshe@988 232 copie du fichier originel. Il traite ces fichiers copiés spécialement
youshe@988 233 lorsque vous faites une fusion (merge) de votre travail avec quelqu'un
youshe@988 234 d'autre.</para>
youshe@988 235
youshe@988 236 <sect2>
youshe@988 237 <title>Les résultat d'une copie durant une fusion (merge)</title>
youshe@988 238
youshe@988 239 <para id="x_1bd">Ce qu'il se passe durant une fusion (merge) est que
youshe@988 240 les changements <quote>suivent</quote> une copie. Pour illustrer ce
youshe@988 241 que ça veut dire de la meilleure façon, créons un exemple. Nous
youshe@988 242 allons commencer avec le mini dépôt usuel qui contient un simple
youshe@988 243 fichier.</para>
bos@567 244
bos@567 245 &interaction.daily.copy.init;
bos@567 246
youshe@988 247 <para id="x_1be">Nous devons faire du travail en parallèle, ainsi,
youshe@988 248 nous aurons quelque chose à fusionner (merge). Donc clonons notre
youshe@988 249 dépôt.</para>
bos@567 250
bos@567 251 &interaction.daily.copy.clone;
bos@567 252
youshe@988 253 <para id="x_1bf">De retour dans notre dépôt initial, utilisons la
youshe@988 254 commande <command role="hg-cmd">hg copy</command> pour faire une
youshe@988 255 copie du premier fichier que nous avons créé.</para>
bos@567 256
bos@567 257 &interaction.daily.copy.copy;
bos@559 258
youshe@988 259 <para id="x_1c0">Si nous regardons ensuite à la sortie de la commande
youshe@988 260 <command role="hg-cmd">hg status</command>, les fichiers copiés
youshe@988 261 ont l'air de fichiers normalement ajoutés.</para>
bos@567 262
bos@567 263 &interaction.daily.copy.status;
bos@567 264
youshe@988 265 <para id="x_1c1">Mais si nous passons l'option <option
youshe@988 266 role="hg-opt-status">-C</option> à <command role="hg-cmd">hg
youshe@988 267 status</command>, il affiche une autre ligne de sortie : il s'agit
youshe@988 268 du fichier <emphasis>source</emphasis> pour notre copie.</para>
bos@567 269
bos@567 270 &interaction.daily.copy.status-copy;
bos@559 271
youshe@988 272 <para id="x_1c2">Maintenant, de retour dans le dépôt que nous avons
youshe@988 273 cloné, et créons un changement en parallèle. Nous allons ajouter une
youshe@988 274 ligne de contenu au fichier original qui a été créé.</para>
bos@567 275
bos@567 276 &interaction.daily.copy.other;
bos@567 277
youshe@988 278 <para id="x_1c3">Maintenant, nous avons un fichier
youshe@988 279 <filename>file</filename> modifié dans ce dépôt. Lorsque nous
youshe@988 280 récupérons (pull) les changements depuis le premier répertoire et
youshe@988 281 fusionnons (merge) les deux HEADS, Mercurial propagera les
youshe@988 282 changements que nous avons fait localement au fichier
youshe@988 283 <filename>file</filename> dans sa copie
youshe@988 284 <filename>new-file</filename>.</para>
bos@567 285
bos@567 286 &interaction.daily.copy.merge;
youshe@988 287
youshe@988 288 </sect2>
bos@559 289 <sect2 id="sec:daily:why-copy">
youshe@988 290 <title>Pourquoi les changements devraient suivre les copies ?</title>
youshe@988 291
youshe@988 292 <para id="x_1c4">Ce comportement&emdash;des changements d'un fichiers
youshe@988 293 qui se propagent aux copies de ce fichier&emdash;peut sembler
youshe@988 294 ésotérique, mais, dans la plupart des cas, c'est hautement
youshe@988 295 désirable.</para>
youshe@988 296
youshe@988 297 <para id="x_1c5">Pour commencer, souvenez vous que cette propagation
youshe@988 298 a lieue <emphasis>seulement</emphasis> lors des fusions (merge).
youshe@988 299 Donc, si vous faites un <command role="hg-cmd">hg copy</command> sur
youshe@988 300 un fichier, et par la suite modifiez le fichier original durant le
youshe@988 301 cours normal de votre travail, rien n'a lieu.</para>
youshe@988 302
youshe@988 303 <para id="x_1c6">La deuxième chose à savoir c'est que les modifications
youshe@988 304 ne se propageront à travers une copie que si le changeset à partir
youshe@988 305 duquel vous faites une fusion (merge) <emphasis>n'a pas encore
youshe@988 306 vu</emphasis> la copie.</para>
youshe@988 307
youshe@988 308 <para id="x_1c7">La raison pour laquelle Mercurial fait ainsi est une
youshe@988 309 règle. Disons que je corrige un important bug dans un fichier source
youshe@988 310 et commit mes changements. Pendant ce temps, vous avez décidé de
youshe@988 311 faire un <command role="hg-cmd">hg copy</command> du fichier dans
youshe@988 312 votre dépôt, sans rien savoir au sujet du bug ou sans avoir rien vu à
youshe@988 313 propos de la correction, et vous avez commencé à "hacker" sur votre
youshe@988 314 copie du fichier.</para>
youshe@988 315
youshe@988 316 <para id="x_1c8">Si vous aviez récupéré (pull) et fusionné (merge) mes
youshe@988 317 changements, et que Mercurial <emphasis>n'avait pas</emphasis>
youshe@988 318 propagé les changements à travers les copies, votre nouveau fichier
youshe@988 319 source contiendrait maintenant le bug, et à moins que vous sachiez
youshe@988 320 qu'il faille propager la correction du bug à la main, le bug aurait
youshe@988 321 <emphasis>subsisté</emphasis> dans votre copie du fichier.</para>
youshe@988 322
youshe@988 323 <para id="x_1c9">En propageant automatiquement les changements qui
youshe@988 324 fixent les bugs à partir du fichier original vers les copies,
youshe@988 325 Mercurial prévient ce type de problèmes. A ma connaissance, Mercurial
youshe@988 326 est le <emphasis>seul</emphasis> système de gestion de révisions qui
youshe@988 327 propage les changements à travers les copies comme ceci.</para>
youshe@988 328
youshe@988 329 <para id="x_1ca">Une fois que votre historique des changements a un
youshe@988 330 enregistrement concernant une copie et une fusion postérieure qui a
youshe@988 331 eu lieue, il n'y a d'habitude pas d'autre besoin de propager les
youshe@988 332 changements du fichier originel vers le fichier copié, et c'est
youshe@988 333 pourquoi Mercurial ne propage les changements à travers les copies
youshe@988 334 seulement à la première fusion, et pas d'avantage.</para>
youshe@988 335 </sect2>
youshe@988 336
youshe@988 337 <sect2>
youshe@988 338 <title>Comment faire des changements qui <emphasis>ne</emphasis>
youshe@988 339 suivent <emphasis>pas</emphasis> une copie</title>
youshe@988 340
youshe@988 341 <para id="x_1cb">Si pour une raison ou une autre, vous décidez que
youshe@988 342 cette fonctionnalité de propager automatiquement les changements à
youshe@988 343 travers les copies n'est pas pour vous, utilisez simplement la
youshe@988 344 commande normale de copie de votre système (sur les systèmes de type
youshe@988 345 Unix, il s'agit de <command>cp</command>) pour faire une copie d'un
youshe@988 346 fichier. Utilisez ensuite <command role="hg-cmd">hg add</command>
youshe@988 347 pour ajouter les nouveaux fichiers à la main. Cependant, avant d'en
youshe@988 348 faire ainsi, relisez <xref linkend="sec:daily:why-copy"/>, et faites
youshe@988 349 un choix en tout état de cause que cette fonctionnalité n'est pas
youshe@988 350 appropriée à votre cas spécifique.</para>
youshe@988 351
youshe@988 352 </sect2>
youshe@988 353 <sect2>
youshe@988 354 <title>Comportement de la commande <command role="hg-cmd">hg copy</command></title>
youshe@988 355
youshe@988 356 <para id="x_1cc">Lorsque vous utilisez la commande <command
youshe@988 357 role="hg-cmd">hg copy</command>, Mercurial crée une copie de chaque
youshe@988 358 fichier source tel qu'il est actuellement dans le répertoire de
youshe@988 359 travail. Cela signifie que si vous faites des modifications à un
youshe@988 360 fichier, puis faites un <command role="hg-cmd">hg copy</command> sur
youshe@988 361 celui-ci sans avoir au préalable commité ces changements, la nouvelle
youshe@988 362 copie contiendra aussi les modifications que vous avez fait jusqu'à
youshe@988 363 ce point. modifications you have made up until that point. (Je
youshe@988 364 trouve ce comportement quelque peu contre intuitif, c'est pourquoi
youshe@988 365 j'en fais mention ici.)</para>
youshe@988 366
youshe@988 367 <para id="x_1cd">La commande <command role="hg-cmd">hg copy</command>
youshe@988 368 agit comme la commande Unix <command>cp</command> (vous pouvez
youshe@988 369 utilisez l'alias <command role="hg-cmd">hg cp</command> si vous
youshe@988 370 préférez). Nous devons lui donner deux ou plus arguments où le
youshe@988 371 dernier est considéré comme la <emphasis>destination</emphasis>, et
youshe@988 372 les autres comme les <emphasis>sources</emphasis>.</para>
youshe@988 373
youshe@988 374 <para id="x_685">Si vous passez à <command role="hg-cmd">hg
youshe@988 375 copy</command> un seul fichier source, et que la destination
youshe@988 376 n'existe pas, ceci créera un nouveau fichier avec ce nom.</para>
bos@567 377
bos@567 378 &interaction.daily.copy.simple;
youshe@988 379
youshe@988 380 <para id="x_1ce">Si la destination est un répertoire, Mercurial copie
youshe@988 381 les sources dans ce répertoire.</para>
bos@567 382
bos@567 383 &interaction.daily.copy.dir-dest;
bos@567 384
youshe@988 385 <para id="x_1cf">La copie de répertoire est récursive et préserve la
youshe@988 386 structure du répertoire source.</para>
bos@567 387
bos@567 388 &interaction.daily.copy.dir-src;
bos@567 389
youshe@988 390 <para id="x_1d0">Si la source et la destination sont tous deux des
youshe@988 391 répertoires, l'arborescence de la source est recrée dans le
youshe@988 392 répertoire destination.</para>
youshe@988 393
youshe@988 394 &interaction.daily.copy.dir-src-dest;
youshe@988 395
youshe@988 396 <para id="x_1d1">Comme avec la commande <command role="hg-cmd">hg
youshe@988 397 remove</command>, si vous copiez un fichier manuellement et voulez
youshe@988 398 que Mercurial sache qu'il s'agit d'une copie, utilisez simplement
youshe@988 399 l'option <option role="hg-opt-copy">--after</option> avec <command
youshe@988 400 role="hg-cmd">hg copy</command>.</para>
bos@567 401
bos@567 402 &interaction.daily.copy.after;
bos@559 403 </sect2>
bos@559 404 </sect1>
bos@674 405
bos@559 406 <sect1>
youshe@988 407 <title>Renommer les fichiers</title>
youshe@988 408
youshe@988 409 <para id="x_1d2">Il est plus commun d'avoir besoin de renommer un
youshe@988 410 fichier que d'en faire une copie. La raison pour laquelle j'ai discuté
youshe@988 411 de la commande <command role="hg-cmd">hg copy</command> avant de parler
youshe@988 412 de renommage des fichiers est que Mercurial traite les renommages
youshe@988 413 essenciellement comme une copie. Ainsi, savoir comment Mercurial traite
youshe@988 414 les copies de fichiers vous informe sur ce que vous êtes en droit
youshe@988 415 d'attendre lorsque vous renommez un fichier.</para>
youshe@988 416
youshe@988 417 <para id="x_1d3">Lorsque vous utilisez la commande <command
youshe@988 418 role="hg-cmd">hg rename</command>, Mercurial crée uen copie de chaque
youshe@988 419 fichier source, les supprime et marque ces fichiers comme étant
youshe@988 420 supprimés.</para>
youshe@988 421
youshe@988 422 &interaction.daily.rename.rename;
youshe@988 423
youshe@988 424 <para id="x_1d4">La commande <command role="hg-cmd">hg status</command>
youshe@988 425 montre le nouveau fichier comme ajouté et le fichier origine comme
youshe@988 426 supprimé.</para>
bos@567 427
bos@567 428 &interaction.daily.rename.status;
bos@567 429
youshe@988 430 <para id="x_1d5">A cause du <command role="hg-cmd">hg copy</command>,
youshe@988 431 nous devons utiliser l'option <option role="hg-opt-status">-C</option>
youshe@988 432 pour <command role="hg-cmd">hg status</command> afin d'observer que le
youshe@988 433 fichier ajouté est bien suivi par Mercurial comme étant une copie de
youshe@988 434 l'original maintenant supprimé.</para>
bos@567 435
bos@567 436 &interaction.daily.rename.status-copy;
bos@559 437
youshe@988 438 <para id="x_1d6">Comme avec <command role="hg-cmd">hg remove</command> et
youshe@988 439 <command role="hg-cmd">hg copy</command>, vous pouvez informer
youshe@988 440 Mercurial à propos d'un renommage après coup en utilisant l'option
youshe@988 441 <option role="hg-opt-rename">--after</option>. Dans le plus grand
youshe@988 442 respet, le comportement de la commande <command role="hg-cmd">hg
youshe@988 443 rename</command>, et les options qu'il accepte sont similaires à la
youshe@988 444 commande <command role="hg-cmd">hg copy</command>.</para>
youshe@988 445
youshe@988 446 <para id="x_686">Si vous êtes familié avec la ligne de commande Unix,
youshe@988 447 vous serez heureux d'apprendre que la commande <command
youshe@988 448 role="hg-cmd">hg rename</command> peut être invoquée par <command
youshe@988 449 role="hg-cmd">hg mv</command>.</para>
youshe@988 450
youshe@988 451 <sect2>
youshe@988 452 <title>Renommer les fichiers et fusionner (merge) les changements</title>
youshe@988 453
youshe@988 454 <para id="x_1d7">Puise que le rename de Mercurial est implanté comme un
youshe@988 455 "copy-and-remove", la même propagation des changements a lieue
youshe@988 456 lorsque vous fusionnez (merge) après un "rename" qu'après un
youshe@988 457 "copy".</para>
youshe@988 458
youshe@988 459 <para id="x_1d8">Si je modifie un fichier et que vous le renommez, si
youshe@988 460 ensuite nous fusionnons nos changements respectifs, mes modifications
youshe@988 461 sur le fichier sous son nom originel seront propagés vers le même
youshe@988 462 fichier sous son nouveau nom. (C'est quelque chose que vous pourriez
youshe@988 463 espérer voir <quote>fonctionner simplement</quote>, mais tous les
youshe@988 464 systèmes de gestion de version ne le font pas.)</para>
youshe@988 465
youshe@988 466 <para id="x_1d9">Tandis qu'avoir des changements qui suivent une copie
youshe@988 467 est une fonctionnalité où vous hocheriez sûrement la tête en disant
youshe@988 468 <quote>oui, cela pourrait être utile</quote>, il est clair que les
youshe@988 469 voir suivre un renommage est définitivement important. Sans cette
youshe@988 470 aptitude, il serait simplement trop facile d'avoir des changements
youshe@988 471 qui deviennent orphelins lorsque des fichiers sont renommés.</para>
youshe@988 472 </sect2>
youshe@988 473
youshe@988 474 <sect2>
youshe@988 475 <title>Renommages divergeants et fusion (merge)</title>
youshe@988 476
youshe@988 477 <para id="x_1da">Le cas de noms divergeants a lieu lorsque deux
youshe@988 478 développeurs commencent avec un fichier&emdash;apprelons le
youshe@988 479 <filename>foo</filename>&emdash;dans leurs dépôts respectifs.</para>
bos@559 480
bos@567 481 &interaction.rename.divergent.clone;
bos@567 482
youshe@988 483 <para id="x_1db">Anne renomme le fichier en
youshe@988 484 <filename>bar</filename>.</para>
bos@567 485
bos@567 486 &interaction.rename.divergent.rename.anne;
bos@567 487
youshe@988 488 <para id="x_1dc">Pendant ce temps, Bob le renomme en
youshe@988 489 <filename>quux</filename>. (Souvenez vous que <command
youshe@988 490 role="hg-cmd">hg mv</command> est un alias pour <command
youshe@988 491 role="hg-cmd">hg rename</command>.)</para>
youshe@988 492
youshe@988 493 &interaction.rename.divergent.rename.bob;
youshe@988 494
youshe@988 495 <para id="x_1dd">J'aime à penser qu'il s'agit d'un conflit puisque
youshe@988 496 chaque développeur a exprimé différentes intentions au sujet de ce
youshe@988 497 que le nom de ce fichier aurait du être.</para>
youshe@988 498
youshe@988 499 <para id="x_1de">Que pensez vous qu'il devrait se produire lorsqu'ils
youshe@988 500 fusionnent (merge) leurs travaux ? Le comportement actuel de
youshe@988 501 Mercurial est qu'il préserve toujours les <emphasis>deux</emphasis>
youshe@988 502 noms lorsqu'il fusionne (merge) des changesets qui contiennent des
youshe@988 503 renommages divergeants.</para>
bos@567 504
bos@567 505 &interaction.rename.divergent.merge;
bos@559 506
youshe@988 507 <para id="x_1df">Remarquez que bien que Mercurial vous avertisse au
youshe@988 508 sujet de la divergeance des renommages, il vous laisse faire quelque
youshe@988 509 chose au sujet de la divergeance après la fusion (merge).</para>
youshe@988 510 </sect2>
youshe@988 511
youshe@988 512 <sect2>
youshe@988 513 <title>Renommages et fusion convergeants</title>
youshe@988 514
youshe@988 515 <para id="x_1e0">Un autre type de conflit de renommage intervient
youshe@988 516 lorsque deux personne choisissent de renommer différents fichiers
youshe@988 517 <emphasis>source</emphasis> vers la même
youshe@988 518 <emphasis>destination</emphasis>. Dans ce cas, Mercurial exécute la
youshe@988 519 machinerie normale de fusion (merge) et vous guide vers une
youshe@988 520 solution convenable.</para>
youshe@988 521 </sect2>
youshe@988 522
youshe@988 523 <sect2>
youshe@988 524 <title>Autres cas anguleux relatifs aux noms</title>
youshe@988 525
youshe@988 526 <para id="x_1e1">Mercurial possède un bug de longue date dans lequel il
youshe@988 527 échoue à traiter une fusion (merge) où un coté a un fichier avec un
youshe@988 528 nom donné, alors que l'autre coté a un répertoire avec le même nom.
youshe@988 529 Ceci est documenté dans l'<ulink role="hg-bug"
youshe@988 530 url="http://www.selenic.com/mercurial/bts/issue29">issue
youshe@988 531 29</ulink>.</para>
bos@567 532
bos@567 533 &interaction.issue29.go;
bos@559 534
bos@559 535 </sect2>
bos@559 536 </sect1>
bos@674 537
bos@559 538 <sect1>
youshe@988 539 <title>Récupération d'erreurs</title>
youshe@988 540
youshe@988 541 <para id="x_1e2">Mercurial possède certaines commandes utiles qui vont
youshe@988 542 vous aider à récupérer certaines erreurs communes.</para>
youshe@988 543
youshe@988 544 <para id="x_1e3">La commande <command role="hg-cmd">hg revert</command>
youshe@988 545 vous permet d'annuler les changements que vous avez fait dans votre
youshe@988 546 répertoire de travail. Par exemple, si vous faites un <command
youshe@988 547 role="hg-cmd">hg add</command> sur un fichier par accident, exécutez
youshe@988 548 juste <command role="hg-cmd">hg revert</command> avec le nom du fichier
youshe@988 549 que vous avez ajouté et tandis que le fichier ne touché d'une
youshe@988 550 quelconque manière, il ne sera plus suivi comme ajouté par Mercurial.
youshe@988 551 Vous pouvez aussi utiliser la commande <command role="hg-cmd">hg
youshe@988 552 revert</command> pour vous débarasser de modifications erronés
youshe@988 553 apportées à un fichier.</para>
youshe@988 554
youshe@988 555 <para id="x_1e4">Il est utile de se souvenir que la commande <command
youshe@988 556 role="hg-cmd">hg revert</command> est utile pour les modifications
youshe@988 557 qui n'ont pas encore été commitées. Une fois que vous avez committé un
youshe@988 558 changement, si vous décidez qu'il s'agissait d'une erreur, vous pouvez
youshe@988 559 toujours faire quelquechose à ce sujet, bien que vos options seront
youshe@988 560 un peu plus limitées.</para>
youshe@988 561
youshe@988 562 <para id="x_1e5">Pour plus d'informations au sujet de la commande
youshe@988 563 <command role="hg-cmd">hg revert</command>, et des détails sur comment
youshe@988 564 traiter les modifications que vous avez déjà committées, référez vous à
youshe@988 565 <xref linkend="chap:undo"/>.</para>
bos@674 566 </sect1>
bos@674 567
bos@674 568 <sect1>
youshe@988 569 <title>Traiter avec les fusions (merge) malicieuses</title>
youshe@988 570
youshe@988 571 <para id="x_687">Dans des projets compliqués ou conséquents, il n'est pas
youshe@988 572 rare qu'une fusion (merge) de deux changesets finisse par une migraine.
youshe@988 573 Supposez qu'il y a un gros fichier source qui a été largement édité de
youshe@988 574 chaque coté de la fusion (merge) : ceci va inévitablement résulter en
youshe@988 575 conflits, dont certains peuvent prendre quelques essais pour s'en
youshe@988 576 sortir.</para>
youshe@988 577
youshe@988 578 <para id="x_688">Développons en un cas simple pour voir comment traiter
youshe@988 579 avec. Nous allons commencer avec un dépôt contenant un fichier, et le
youshe@988 580 cloner deux fois.</para>
bos@674 581
bos@674 582 &interaction.ch04-resolve.init;
bos@674 583
youshe@988 584 <para id="x_689">Dans un des clones, nous allons modifier le fichier
youshe@988 585 d'une façon.</para>
bos@674 586
bos@674 587 &interaction.ch04-resolve.left;
bos@674 588
youshe@988 589 <para id="x_68a">Dans un autre, nous allons modifier le fichier
youshe@988 590 différamment.</para>
bos@674 591
bos@674 592 &interaction.ch04-resolve.right;
bos@674 593
youshe@988 594 <para id="x_68b">Ensuite, nous allons récupérer (pull) chaque ensemble de
youshe@988 595 changement dans notre dépôt original.</para>
bos@674 596
bos@674 597 &interaction.ch04-resolve.pull;
bos@674 598
youshe@988 599 <para id="x_68c">Nous nous attendons à ce que notre dépôt contienne deux
youshe@988 600 HEADS.</para>
bos@674 601
bos@674 602 &interaction.ch04-resolve.heads;
bos@674 603
youshe@988 604 <para id="x_68d">Normalement, si nous lançons <command role="hg-cmd">hg
youshe@988 605 merge</command> à ce point, il nous renverra vers une interface
youshe@988 606 utilisateur qui nous permettra de résoudre manuellement les éditions
youshe@988 607 conflictuelles sur le fichier <filename>myfile.txt</filename>.
youshe@988 608 Cependant, pour simplifier les choses dans la présentation ici, nous
youshe@988 609 aimerions que la fusion (merge) échoue immédiatement plutôt. Voici une
youshe@988 610 façon de le faire.</para>
bos@674 611
bos@674 612 &interaction.ch04-resolve.export;
bos@674 613
youshe@988 614 <para id="x_68e">Nous avons dit à la machinerie de fusion de Mercurial
youshe@988 615 d'exécuter la commande <command>false</command> (qui échoue
youshe@988 616 immédiatement, à la demande) s'il détecte une fusion (merge) qu'il ne
youshe@988 617 peut pas arranger automatiquement.</para>
youshe@988 618
youshe@988 619 <para id="x_68f">Si nous appelons maintenant <command role="hg-cmd">hg
youshe@988 620 merge</command>, il devrait planter et reporter une erreur.</para>
bos@674 621
bos@674 622 &interaction.ch04-resolve.merge;
bos@674 623
youshe@988 624 <para id="x_690">Même si nous ne remarquons pas qu'une fusion (merge) a
youshe@988 625 échoué, Mercurial nous empéchera de committer le résultat d'une fusion
youshe@988 626 ratée.</para>
bos@674 627
bos@674 628 &interaction.ch04-resolve.cifail;
bos@674 629
youshe@988 630 <para id="x_691">Lorsque <command role="hg-cmd">hg commit</command>
youshe@988 631 échoue dans ce cas, il suggère que nous utilisons la commande peu
youshe@988 632 connue <command role="hg-cmd">hg resolve</command>. Comme d'habitude,
youshe@988 633 <command role="hg-cmd">hg help resolve</command> affichera une aide
youshe@988 634 sommaire.</para>
bos@674 635
bos@674 636 <sect2>
youshe@989 637 <title>Etats de résolution des fichiers</title>
youshe@989 638 <!-- TODO Vérifier traduction : File resolution states -->
youshe@989 639
youshe@989 640 <para id="x_692">Lorsqu'une fusion intervient, la plupart des fichier
youshe@989 641 vont, la plupart du temps, rester sans modification. Pour chaque
youshe@989 642 fichier sur lequel Mercurial doit faire quelque chose, il suit l'état
youshe@989 643 de celui-ci.</para>
bos@674 644
bos@674 645 <itemizedlist>
youshe@989 646 <listitem><para id="x_693">Un fichier
youshe@989 647 <quote><emphasis>resolved</emphasis></quote> a été fusionné
youshe@989 648 (merge) avec succès, que ce soit automatiquement par Mercurial ou
youshe@989 649 manuellement par une intervention humaine.</para></listitem>
youshe@989 650 <listitem><para id="x_694">Un fichier
youshe@989 651 <quote><emphasis>unresolved</emphasis></quote> n'a pas été
youshe@989 652 fusionné (merge) correctement et a besoin de plus
youshe@989 653 d'attention.</para>
youshe@989 654 </listitem>
bos@674 655 </itemizedlist>
bos@674 656
youshe@989 657 <para id="x_695">Si Mercurial voit <emphasis>n'importe quel</emphasis>
youshe@989 658 fichier dans un état <quote>unresolved</quote> après une fusion
youshe@989 659 (merge), il considère que la fusion (merge) a échoué. Heureusement,
youshe@989 660 nous n'avons pas à recommencer la fusion (merge) à partir du
youshe@989 661 début.</para>
youshe@989 662
youshe@989 663 <para id="x_696">L'option <option role="hg-opt-resolve">--list</option>
youshe@989 664 ou <option role="hg-opt-resolve">-l</option> passée à <command
youshe@989 665 role="hg-cmd">hg resolve</command> liste l'état de chaque fichier
youshe@989 666 fusionné (merge).</para>
bos@674 667
bos@674 668 &interaction.ch04-resolve.list;
bos@674 669
youshe@989 670 <para id="x_697">En sortie de <command role="hg-cmd">hg
youshe@989 671 resolve</command>, un fichier "resolved" est marqué avec un
youshe@989 672 <literal>R</literal>, alors qu'un fichier "unresolved" est marqué
youshe@989 673 d'un <literal>U</literal>. S'il existe un fichier listé avec un
youshe@989 674 <literal>U</literal>, nous savons qu'essayer de committer le résultat
youshe@989 675 de la fusion (merge) échoura.</para>
youshe@989 676 </sect2>
youshe@989 677
youshe@989 678 <sect2>
youshe@989 679 <title>Résoudre une fusion de fichier</title>
youshe@989 680
youshe@989 681 <para id="x_698">Nous avons plusieurs options pour changer l'état d'un
youshe@989 682 fichier de "unresolved" à "resolved". Le plus commun est de relancer
youshe@989 683 <command role="hg-cmd">hg resolve</command>. Si nous passons les noms
youshe@989 684 des fichiers individuels ou des répertoires, ceci retentera la fusion
youshe@989 685 de tous les fichiers présents à cet endroit. Nous pouvons aussi
youshe@989 686 passer l'option <option role="hg-opt-resolve">--all</option> ou
youshe@989 687 <option role="hg-opt-resolve">-a</option> qui tentera de fusionner
youshe@989 688 <emphasis>tous</emphasis> les fichiers "unresolved".</para>
youshe@989 689
youshe@989 690 <para id="x_699">Mercurial nous laisse aussi modifier la résolution
youshe@989 691 d'un fichier directement. Nous pouvons marquer un fichier "resolved"
youshe@989 692 en utilisant l'option <option role="hg-opt-resolve">--mark</option>,
youshe@989 693 ou "unresolved" en utilisant l'option <option
youshe@989 694 role="hg-opt-resolve">--unmark</option>. Ceci nous autorise à
youshe@989 695 nettoyer une fusion particulièrement compliqué à la main, et de
youshe@989 696 garder un suivi de nos progrès avec chaque fichier pendant que nous
youshe@989 697 procédons.</para>
bos@674 698 </sect2>
bos@559 699 </sect1>
bos@683 700
bos@683 701 <sect1>
youshe@989 702 <title>Des diffs plus utiles</title>
youshe@989 703
youshe@989 704 <para id="x_6c7">La sortie par défaut de la commande <command
youshe@989 705 role="hg-cmd">hg diff</command> est compatible rétrospectivement avec la commande régulière <command>diff</command>, mais ceci a quelques inconvénients.</para>
youshe@989 706
youshe@989 707 <para id="x_6c8">Considérez le cas où nous utilisons <command role="hg-cmd">hg
youshe@989 708 rename</command> pour renommer un fichier.</para>
bos@683 709
bos@683 710 &interaction.ch04-diff.rename.basic;
bos@683 711
youshe@989 712 <para id="x_6c9">La sortie de <command role="hg-cmd">hg diff</command> ci
youshe@989 713 dessus cache le fait que nous avons simplement renommé un fichier. La
youshe@989 714 commande <command role="hg-cmd">hg diff</command> accepte l'option
youshe@989 715 <option>--git</option> ou <option>-g</option> pour utiliser un nouveau
youshe@989 716 format de diff qui montre ces informations sous une forme plus
youshe@989 717 expressive.</para>
bos@683 718
bos@683 719 &interaction.ch04-diff.rename.git;
bos@683 720
youshe@989 721 <para id="x_6ca">Cette option peut aussi aider avec le cas autrement
youshe@989 722 confus : un fichier qui apparaît comme étant modifié en accord avec
youshe@989 723 <command role="hg-cmd">hg status</command>, mais où <command
youshe@989 724 role="hg-cmd">hg diff</command> n'affiche rien. Cette situation peut
youshe@989 725 survenir si nous changeons les permissions d'exécution du
youshe@989 726 fichier.</para>
bos@683 727
bos@683 728 &interaction.ch04-diff.chmod;
bos@683 729
youshe@989 730 <para id="x_6cb">La commande normale <command>diff</command> ne fait pas
youshe@989 731 attention aux permissions des fichiers, ce qui explique pourquoi
youshe@989 732 <command role="hg-cmd">hg diff</command> n'affiche rien du tout par
youshe@989 733 défaut. Si nous lui passons l'option <option>-g</option>, ceci nous
youshe@989 734 informe de ce qu'il s'est vraiment passé.</para>
bos@683 735
bos@683 736 &interaction.ch04-diff.chmod.git;
bos@683 737 </sect1>
bos@683 738
bos@683 739 <sect1>
youshe@989 740 <title>Quels fichiers gérer et lesquels éviter</title>
youshe@989 741
youshe@989 742 <para id="x_6cc">Les systèmes de gestion de révisions sont en général
youshe@989 743 meilleurs pour gérer les fichiers textes qui sont écrits par les
youshe@989 744 humains, comme le code source, où les fichiers ne changent pas
youshe@989 745 énormément d'une révision à l'autre. Certains systèmes de gestion de
youshe@989 746 révisions centralisés peuvent aussi traiter très correctement les
youshe@989 747 fichiers binaires, comme les images bitmap.</para>
youshe@989 748
youshe@989 749 <para id="x_6cd">Par exemple, une équipe de développement de jeux va
youshe@989 750 probablement gérer les deux : ses codes source et tous ses binaires
youshe@989 751 (ex. données géométriques, textures, schémas de cartes) dans un système
youshe@989 752 de contrôle de révisions.</para>
youshe@989 753 <!-- Vérifier la traduction de map layouts que j'ai traduit par schémas
youshe@989 754 de cartes -->
youshe@989 755
youshe@989 756 <para id="x_6ce">Puisqu'il est d'habitude impossible de fusionner (merge)
youshe@989 757 deux modifications conflictuelles sur un fichier binaire, les systèmes
youshe@989 758 de version centralisé offre souvent un mécanisme de verrou (lock) qui
youshe@989 759 permet à un utilisateur de dire <quote>Je suis la seule personne qui
youshe@989 760 peut éditer ce fichier</quote>.</para>
youshe@989 761
youshe@989 762 <para id="x_6cf">En comparaison d'un système centralisé, un système
youshe@989 763 décentralisé de gestion de révision change certains facteurs qui
youshe@989 764 guident les décisions sur quels fichiers gérer et comment.</para>
youshe@989 765
youshe@989 766 <para id="x_6d0">Par exemple, un système distribé de gestion de révisions
youshe@989 767 ne peut pas, par sa nature, offrir un système de vérrous (lock) sur les
youshe@989 768 fichiers. Il n'y a donc pas de mécanisme inclu pour empécher deux
youshe@989 769 personnes de faire des modifications conflictuelles sur un fichier
youshe@989 770 binaire. Si vous avez une équipe où plusieurs personnes peuvent souvent
youshe@989 771 éditer un fichier binaire, cela ne serait pas une très bonne idée
youshe@989 772 d'utiliser Mercurial &emdash;ou tout autre système distribé de gestion
youshe@989 773 de révisions&emdash;pour gérer ces fichiers.</para>
youshe@989 774
youshe@989 775 <para id="x_6d1">Lorsque vous sauvegardez les modifications sur un
youshe@989 776 fichier, Mercurial ne sauvegarde d'habitude que les différences entre
youshe@989 777 la version précédente et la version actuelle d'un fichier. Pour la
youshe@989 778 plupart des fichiers texte, ceci est très efficace. Cependant, certains
youshe@989 779 fichiers (en particulier les fichiers binaires) sont construits d'une
youshe@989 780 façon que même un petit changement sur un contenu logique résulte sur
youshe@989 781 un changement de la plupart des octets du fichier. Par exemple, les
youshe@989 782 fichiers compressés sont particulièrement suceptibles à ce
youshe@989 783 comportement. Si les différences entre deux versions successives d'un
youshe@989 784 fichier sont toujours très grandes, Mercurial ne sera pas capable de
youshe@989 785 sauvegarder l'historique des révisions sur le fichier très
youshe@989 786 efficacement. Ceci peut affecter aussi bien les besoins locaux pour
youshe@989 787 sauvegarder que le temps nécessaire à cloner le dépôt.</para>
youshe@989 788
youshe@989 789 <para id="x_6d2">Pour avoir une idée de comment ceci pourrait vous
youshe@989 790 affecter en pratique, supposez que nous voulions que Mercurial gère des
youshe@989 791 documents OpenOffice. OpenOffice sauvegarde les documents sur le disque
youshe@989 792 comme des fichiers compressés zip. Même le fait d'éditer ces fichiers
youshe@989 793 d'une seule lettre, changera les bits de la quasi totalité du fichier
youshe@989 794 lorsque vous le sauvegarderez. Maintenant, supposez que ce fichier
youshe@989 795 fasse une taille de 2Mo. Puisque la plupart du fichier change à chaque
youshe@989 796 fois que vous sauvegardez, Mercurial aura à sauvegarder tous les 2Mo du
youshe@989 797 fichier à chaque commit, alors que de votre point de vue, il n'y a
youshe@989 798 seulement que peu de mots qui changent à chaque fois. Un seul fichier
youshe@989 799 souvent édité qui n'est pas bien connu des hypothèses que Mercurial
youshe@989 800 fait sur les sauvegardes peut facilement avoir un effet colossal sur la
youshe@989 801 taille du dépôt.</para>
youshe@989 802
youshe@989 803 <para id="x_6d3">Même pire, si vous et quelqu'un d'autre éditez le même
youshe@989 804 document OpenOffice sur lequel vous travaillez, il n'y a pas de façon
youshe@989 805 utile pour fusionner votre travail. En fait, il n'y a pas de moyen
youshe@989 806 utile de montrer que les différences sont faites à partir de votre
youshe@989 807 vision des modifications.</para>
youshe@989 808
youshe@989 809 <para id="x_6d4">Il y a ainsi quelques recommendations claires sur les
youshe@989 810 types de fichiers spécifiques avec lesquels faire très
youshe@989 811 attention.</para>
bos@683 812
bos@683 813 <itemizedlist>
youshe@989 814 <listitem><para id="x_6d5">Les fichier qui sont très gros et
youshe@989 815 imcompressibles, comme les images ISO de CD-ROM, sont, par
youshe@989 816 construction très gros et les cloner à travers un réseau sera très
youshe@989 817 long.</para></listitem>
youshe@989 818 <!-- Trouver une meilleure traduction pour : ISO CD-ROM images, will by
youshe@989 819 virtue of sheer size make clones over a network very slow. -->
youshe@989 820 <listitem><para id="x_6d6">Les fichiers qui changent beaucoup d'une
youshe@989 821 révision à l'autre peuvent être très chers à sauvegarder si vous
youshe@989 822 les éditez fréquement, de même que les conflits entre deux éditions
youshe@989 823 concurrentes peuvent être difficiles à résoudre.</para>
bos@683 824 </listitem>
bos@683 825 </itemizedlist>
bos@683 826 </sect1>
bos@683 827
bos@683 828 <sect1>
youshe@989 829 <title>Sauvegardes et miroirs</title>
youshe@989 830
youshe@989 831 <para id="x_6d7">Puisque Mercurial maintient une copie complète de
youshe@989 832 l'historique de chaque clone, toute personne qui utilise Mercurial pour
youshe@989 833 collaborer à un projet peut potentiellement agir comme une source de
youshe@989 834 sauvegarde si une catastrophe avait lieue. Si un dépôt central devient
youshe@989 835 indisponible, vous pouvez construire un remplaçant en clonant une copie
youshe@989 836 du dépôt à partir d'un des contributeurs en récupérant (pull) tous les
youshe@989 837 changements qui n'auraient pas été vus par les autres.</para>
youshe@989 838
youshe@989 839 <para id="x_6d8">Il est simple d'utiliser Mercurial pour construire des
youshe@989 840 serveurs hors site de sauvegarde et des miroirs distants. Initiez une
youshe@989 841 tâche périodique (ex. via la commande <command>cron</command>) sur un
youshe@989 842 serveur distant pour récupérer (pull) les changements de votre dépôt
youshe@989 843 distant chaque heure. Ceci sera difficile seullement dans le cas
youshe@989 844 improbable où le nombre des dépôts maîtres que vous maintenez change
youshe@989 845 souvent, auquel cas vous aurez besoin de faire un peu de scripting pour
youshe@989 846 raffraichir la liste des dépôt à sauvegarder.</para>
youshe@989 847
youshe@989 848 <para id="x_6d9">Si vous exécutez des sauvegardes traditionnelles de
youshe@989 849 votre dépôt maître sur des bandes ou disques, et que vous voulez
youshe@989 850 sauvegarder un dépôt nommé <filename>myrepo</filename>, utilisez la
youshe@989 851 commande <command>hg clone -U myrepo myrepo.bak</command> pour créer un
youshe@989 852 clone de <filename>myrepo</filename> avant de commencer vos backups.
youshe@989 853 L'option <option>-U</option> ne crée pas de répertoire de travail après
youshe@989 854 que le clone soit accompli, puisque ceci serait superflu et ferait que
youshe@989 855 la sauvegarde prenne plus de temps.</para>
youshe@989 856
youshe@989 857 <para id="x_6da">Si vous voulez ensuite sauvegarder
youshe@989 858 <filename>myrepo.bak</filename> au lieu de <filename>myrepo</filename>,
youshe@989 859 vous aurez la garantie d'avoir une image (snapshot) consistente de
youshe@989 860 votre dépôt sur lequel un développeur insomniac n'enverra (push) pas de
youshe@989 861 changements en milieu de sauvegarde.</para>
bos@683 862 </sect1>
bos@559 863 </chapter>
bos@559 864
bos@559 865 <!--
bos@559 866 local variables:
bos@559 867 sgml-parent-document: ("00book.xml" "book" "chapter")
bos@559 868 end:
bos@559 869 -->