hgbook

annotate fr/ch05-daily.xml @ 996:6f8c48362758

merge with trunk
author Romain PELISSE <belaran@gmail.com>
date Sat Sep 12 17:58:56 2009 +0200 (2009-09-12)
parents 6b680d569bb4 b4ff7b04efdc
children 75456ed96549
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"?>
youshe@990 5 <title>Mercurial pour une utilisation de tous les jours</title>
bos@559 6
bos@559 7 <sect1>
youshe@990 8 <title>Informer Mercurial des fichier à suivre</title>
youshe@990 9
youshe@990 10 <para id="x_1a3">Mercurial ne suit pas les fichiers de votre dépôt tant
youshe@990 11 que vous ne lui avez pas dit de les gérer. La commande <command
youshe@990 12 role="hg-cmd">hg status</command> vous dira quels fichiers 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@990 26 commit</command>, les fichiers que vous avez ajoutés avant le commit
youshe@990 27 ne seront plus listés dans la sortie de <command role="hg-cmd">hg
youshe@990 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@990 31 modifiés, supprimés ou renommés. Si vous aviez un dépôt qui contient un
youshe@990 32 millier de fichiers, vous ne voudriez 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@990 38 rien du tout avec celui-ci immédiatement. Au 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@990 41 que vous avez fait au fichier chaque fois que vous committerez, et ce,
youshe@990 42 jusqu'à 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@990 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@990 61 commande. Ce que Mercurial suppose dans ce cas est que nous savons ce
youshe@990 62 que nous faisons, il n'affiche donc 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@990 66 d'un répertoire, Mercurial prend l'initiative d'afficher le nom de
youshe@988 67 chaque fichier avec lequel il fait quelque chose. Ceci clarifie ce
youshe@990 68 qu'il se passe et réduit la probabilité d'une mauvaise surprise
youshe@990 69 restée silencieuse. Ce comportement est commun à la plupart des
youshe@990 70 commandes 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@990 76 répertoires. 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@990 80 comme une distinction triviale, cependant, cela 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@990 85 cependant des solutions alternatives et non intrusives que vous
youshe@990 86 pouvez utiliser pour obtenir l'effet approprié. Les développeurs de
youshe@990 87 Mercurial ont ainsi pensé que la complexité requise pour gérer les
youshe@990 88 répertoires n'était pas aussi importante que le bénéfice que cette
youshe@990 89 fonctionnalité 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@990 93 créer un répertoire et ensuite, de faire un <command role="hg-cmd">hg
youshe@990 94 add</command> sur un fichier <quote>caché</quote> dans ce
youshe@990 95 répertoire. Sur les systèmes 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@990 98 graphiques. Cette approche est illustrée 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@990 103 répertoire vide est de simplement d'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@990 124 nom dans votre 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@990 133 <para id="x_1b1">Il est important de comprendre que supprimer 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@990 150 changeset qui a été committé alors que le fichier que vous venez de
youshe@990 151 supprimer était encore suivi, ce fichier réapparaîtra dans le
youshe@988 152 répertoire de travail, avec le contenu qu'il avait lorsque vous aviez
youshe@990 153 committé ce changeset. Si vous mettez à jour (update) le répertoire de
youshe@990 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@990 160 <title>Fichiers 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@990 173 role="hg-cmd">hg status</command> reporte 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@990 184 revert</command> le nom du fichier à retrouver. Il réapparaitra 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@990 196 de dire explicitement à 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@990 206 <title>Raccourci 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@990 233 lorsque vous fusionnez (merge) votre travail avec quelqu'un
youshe@988 234 d'autre.</para>
youshe@988 235
youshe@988 236 <sect2>
youshe@990 237 <title>Les résultats 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@990 241 que cela 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@990 273 cloné, 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@990 278 <para id="x_1c3">Nous avons alors un fichier <filename>file</filename>
youshe@990 279 modifié dans ce dépôt. Lorsque nous récupérons (pull) les changements
youshe@990 280 depuis le premier répertoire et fusionnons (merge) les deux "heads",
youshe@990 281 Mercurial propagera les changements que nous avons faits localement
youshe@990 282 au fichier <filename>file</filename> dans sa copie
youshe@988 283 <filename>new-file</filename>.</para>
bos@567 284
bos@567 285 &interaction.daily.copy.merge;
youshe@988 286
youshe@988 287 </sect2>
bos@559 288 <sect2 id="sec:daily:why-copy">
youshe@990 289 <title>Pourquoi est-ce que les changements devraient suivre les copies
youshe@990 290 ?</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@990 309 règle. Imaginons que je corrige un important bug dans un fichier source
youshe@990 310 et que je 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@990 312 votre dépôt, sans rien savoir au sujet du bug ou à propos de la
youshe@990 313 correction. Vous avez alors commencé à "hacker" sur votre copie du
youshe@990 314 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@990 319 source contiendrait maintenant le bug, et à moins que vous ne 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@990 330 enregistrement concernant une copie et qu'une fusion postérieure a
youshe@988 331 eu lieue, il n'y a d'habitude pas d'autre besoin de propager les
youshe@990 332 changements du fichier originel vers le fichier copié. C'est pourquoi
youshe@990 333 Mercurial ne propage les changements à travers les copies qu'à la
youshe@990 334 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@990 349 un choix en connaissance de cause comme quoi cette fonctionnalité
youshe@990 350 n'est pas 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@990 359 travail. Cela signifie que si vous effectuez des modifications sur un
youshe@988 360 fichier, puis faites un <command role="hg-cmd">hg copy</command> sur
youshe@990 361 celui-ci sans avoir au préalable committé ces changements, la nouvelle
youshe@988 362 copie contiendra aussi les modifications que vous avez fait jusqu'à
youshe@990 363 ce point. (Je trouve ce comportement quelque peu contre intuitif,
youshe@990 364 c'est pourquoi j'en fais mention ici.)</para>
youshe@990 365 <!-- Vérifier que je n'ai pas fait de contre sens en relisant la
youshe@990 366 version anglaise, ce que je comprend ici me paraît un peu bizarre -->
youshe@988 367
youshe@988 368 <para id="x_1cd">La commande <command role="hg-cmd">hg copy</command>
youshe@988 369 agit comme la commande Unix <command>cp</command> (vous pouvez
youshe@988 370 utilisez l'alias <command role="hg-cmd">hg cp</command> si vous
youshe@988 371 préférez). Nous devons lui donner deux ou plus arguments où le
youshe@988 372 dernier est considéré comme la <emphasis>destination</emphasis>, et
youshe@988 373 les autres comme les <emphasis>sources</emphasis>.</para>
youshe@988 374
youshe@988 375 <para id="x_685">Si vous passez à <command role="hg-cmd">hg
youshe@988 376 copy</command> un seul fichier source, et que la destination
youshe@988 377 n'existe pas, ceci créera un nouveau fichier avec ce nom.</para>
bos@567 378
bos@567 379 &interaction.daily.copy.simple;
youshe@988 380
youshe@988 381 <para id="x_1ce">Si la destination est un répertoire, Mercurial copie
youshe@988 382 les sources dans ce répertoire.</para>
bos@567 383
bos@567 384 &interaction.daily.copy.dir-dest;
bos@567 385
youshe@988 386 <para id="x_1cf">La copie de répertoire est récursive et préserve la
youshe@988 387 structure du répertoire source.</para>
bos@567 388
bos@567 389 &interaction.daily.copy.dir-src;
bos@567 390
youshe@988 391 <para id="x_1d0">Si la source et la destination sont tous deux des
youshe@990 392 répertoires, l'arborescence de la source est recréée dans le
youshe@988 393 répertoire destination.</para>
youshe@988 394
youshe@988 395 &interaction.daily.copy.dir-src-dest;
youshe@988 396
youshe@988 397 <para id="x_1d1">Comme avec la commande <command role="hg-cmd">hg
youshe@988 398 remove</command>, si vous copiez un fichier manuellement et voulez
youshe@988 399 que Mercurial sache qu'il s'agit d'une copie, utilisez simplement
youshe@988 400 l'option <option role="hg-opt-copy">--after</option> avec <command
youshe@988 401 role="hg-cmd">hg copy</command>.</para>
bos@567 402
bos@567 403 &interaction.daily.copy.after;
bos@559 404 </sect2>
bos@559 405 </sect1>
bos@674 406
bos@559 407 <sect1>
youshe@988 408 <title>Renommer les fichiers</title>
youshe@988 409
youshe@988 410 <para id="x_1d2">Il est plus commun d'avoir besoin de renommer un
youshe@988 411 fichier que d'en faire une copie. La raison pour laquelle j'ai discuté
youshe@988 412 de la commande <command role="hg-cmd">hg copy</command> avant de parler
youshe@988 413 de renommage des fichiers est que Mercurial traite les renommages
youshe@990 414 essentiellement comme une copie. Ainsi, savoir comment Mercurial traite
youshe@988 415 les copies de fichiers vous informe sur ce que vous êtes en droit
youshe@988 416 d'attendre lorsque vous renommez un fichier.</para>
youshe@988 417
youshe@988 418 <para id="x_1d3">Lorsque vous utilisez la commande <command
youshe@990 419 role="hg-cmd">hg rename</command>, Mercurial crée une copie de tous
youshe@990 420 les fichiers sources, les supprime et marque ces fichiers comme étant
youshe@988 421 supprimés.</para>
youshe@988 422
youshe@988 423 &interaction.daily.rename.rename;
youshe@988 424
youshe@988 425 <para id="x_1d4">La commande <command role="hg-cmd">hg status</command>
youshe@990 426 montre les nouveaux fichiers comme ajoutés et les fichiers originaux
youshe@990 427 comme supprimés.</para>
bos@567 428
bos@567 429 &interaction.daily.rename.status;
bos@567 430
youshe@988 431 <para id="x_1d5">A cause du <command role="hg-cmd">hg copy</command>,
youshe@988 432 nous devons utiliser l'option <option role="hg-opt-status">-C</option>
youshe@990 433 pour la commande <command role="hg-cmd">hg status</command> afin
youshe@990 434 d'observer que le fichier ajouté est bien suivi par Mercurial comme
youshe@990 435 étant une copie de l'original maintenant supprimé.</para>
bos@567 436
bos@567 437 &interaction.daily.rename.status-copy;
bos@559 438
youshe@988 439 <para id="x_1d6">Comme avec <command role="hg-cmd">hg remove</command> et
youshe@988 440 <command role="hg-cmd">hg copy</command>, vous pouvez informer
youshe@990 441 Mercurial au sujet d'un renommage après coup en utilisant l'option
youshe@988 442 <option role="hg-opt-rename">--after</option>. Dans le plus grand
youshe@990 443 respect, le comportement de la commande <command role="hg-cmd">hg
youshe@988 444 rename</command>, et les options qu'il accepte sont similaires à la
youshe@988 445 commande <command role="hg-cmd">hg copy</command>.</para>
youshe@988 446
youshe@990 447 <para id="x_686">Si vous êtes familier avec la ligne de commande Unix,
youshe@988 448 vous serez heureux d'apprendre que la commande <command
youshe@988 449 role="hg-cmd">hg rename</command> peut être invoquée par <command
youshe@988 450 role="hg-cmd">hg mv</command>.</para>
youshe@988 451
youshe@988 452 <sect2>
youshe@988 453 <title>Renommer les fichiers et fusionner (merge) les changements</title>
youshe@988 454
youshe@990 455 <para id="x_1d7">Puise que le "rename" de Mercurial est implanté comme un
youshe@990 456 "copy-and-remove", la même propagation des changements a lieue après
youshe@990 457 un "rename" qu'après un "copy" lorsque vous fusionnez (merge).</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@990 470 aptitude, il serait vraiment 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@990 478 développeurs commencent avec un fichier&emdash;appelons 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@990 528 nom donné, alors que l'autre coté possède 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@990 542 vous aider à récupérer de certaines erreurs communes.</para>
youshe@988 543
youshe@988 544 <para id="x_1e3">La commande <command role="hg-cmd">hg revert</command>
youshe@990 545 vous permet d'annuler les changements que vous avez faits 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@990 549 que vous avez ajouté et tandis que le fichier ne sera 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@990 552 revert</command> pour vous débarrasser 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@990 557 qui n'ont pas encore été committé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@990 559 toujours faire quelque chose à ce sujet, bien que vos options soient
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@990 573 Supposez qu'il y ait un gros fichier source qui ait été largement édité de
youshe@988 574 chaque coté de la fusion (merge) : ceci va inévitablement résulter en
youshe@990 575 conflits, dont certains peuvent prendre plusieurs essais pour s'en
youshe@988 576 sortir.</para>
youshe@988 577
youshe@990 578 <para id="x_688">Développons en un cas simple pour voir comment le gérer.
youshe@990 579 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@990 590 différemment.</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@990 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@990 608 Cependant, pour simplifier ici les choses dans la présentation, nous
youshe@990 609 aimerions plutôt que la fusion (merge) échoue immédiatement. 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@990 614 <para id="x_68e">Nous avons dit au processus 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@990 620 merge</command>, il devrait échouer 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@990 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@990 637 <title>États de résolution des fichiers</title>
youshe@989 638 <!-- TODO Vérifier traduction : File resolution states -->
youshe@989 639
youshe@990 640 <para id="x_692">Lorsqu'une fusion intervient, la plupart des fichiers
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@990 657 <para id="x_695">Si Mercurial voit un fichier
youshe@990 658 <emphasis>quelconque</emphasis> dans un état
youshe@990 659 <quote>unresolved</quote> après une fusion (merge), il considère que
youshe@990 660 la fusion (merge) a échoué. Heureusement, nous n'avons pas à
youshe@990 661 recommencer la procédure à partir du 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@990 675 de la fusion (merge) échouera.</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@990 695 nettoyer une fusion particulièrement compliquée à 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@990 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@990 705 role="hg-cmd">hg diff</command> est compatible rétrospectivement avec
youshe@990 706 la commande régulière <command>diff</command>, mais ceci a quelques
youshe@990 707 inconvénients.</para>
youshe@989 708
youshe@989 709 <para id="x_6c8">Considérez le cas où nous utilisons <command role="hg-cmd">hg
youshe@989 710 rename</command> pour renommer un fichier.</para>
bos@683 711
bos@683 712 &interaction.ch04-diff.rename.basic;
bos@683 713
youshe@990 714 <para id="x_6c9">La sortie de <command role="hg-cmd">hg diff</command>
youshe@990 715 ci-dessus cache le fait que nous avons simplement renommé un fichier.
youshe@990 716 La commande <command role="hg-cmd">hg diff</command> accepte l'option
youshe@989 717 <option>--git</option> ou <option>-g</option> pour utiliser un nouveau
youshe@989 718 format de diff qui montre ces informations sous une forme plus
youshe@989 719 expressive.</para>
bos@683 720
bos@683 721 &interaction.ch04-diff.rename.git;
bos@683 722
youshe@989 723 <para id="x_6ca">Cette option peut aussi aider avec le cas autrement
youshe@989 724 confus : un fichier qui apparaît comme étant modifié en accord avec
youshe@989 725 <command role="hg-cmd">hg status</command>, mais où <command
youshe@989 726 role="hg-cmd">hg diff</command> n'affiche rien. Cette situation peut
youshe@989 727 survenir si nous changeons les permissions d'exécution du
youshe@989 728 fichier.</para>
bos@683 729
bos@683 730 &interaction.ch04-diff.chmod;
bos@683 731
youshe@989 732 <para id="x_6cb">La commande normale <command>diff</command> ne fait pas
youshe@989 733 attention aux permissions des fichiers, ce qui explique pourquoi
youshe@989 734 <command role="hg-cmd">hg diff</command> n'affiche rien du tout par
youshe@989 735 défaut. Si nous lui passons l'option <option>-g</option>, ceci nous
youshe@989 736 informe de ce qu'il s'est vraiment passé.</para>
bos@683 737
bos@683 738 &interaction.ch04-diff.chmod.git;
bos@683 739 </sect1>
bos@683 740
bos@683 741 <sect1>
youshe@990 742 <title>Quels fichiers suivre et lesquels éviter</title>
youshe@989 743
youshe@989 744 <para id="x_6cc">Les systèmes de gestion de révisions sont en général
youshe@989 745 meilleurs pour gérer les fichiers textes qui sont écrits par les
youshe@989 746 humains, comme le code source, où les fichiers ne changent pas
youshe@989 747 énormément d'une révision à l'autre. Certains systèmes de gestion de
youshe@990 748 révisions centralisés peuvent aussi traiter très convenablement les
youshe@990 749 fichiers binaires, tels que les images bitmap.</para>
youshe@989 750
youshe@989 751 <para id="x_6cd">Par exemple, une équipe de développement de jeux va
youshe@990 752 probablement gérer les deux types : ses codes source et tous ses binaires
youshe@989 753 (ex. données géométriques, textures, schémas de cartes) dans un système
youshe@989 754 de contrôle de révisions.</para>
youshe@989 755 <!-- Vérifier la traduction de map layouts que j'ai traduit par schémas
youshe@989 756 de cartes -->
youshe@989 757
youshe@989 758 <para id="x_6ce">Puisqu'il est d'habitude impossible de fusionner (merge)
youshe@989 759 deux modifications conflictuelles sur un fichier binaire, les systèmes
youshe@990 760 de version centralisés offrent souvent un mécanisme de verrou (lock) qui
youshe@989 761 permet à un utilisateur de dire <quote>Je suis la seule personne qui
youshe@989 762 peut éditer ce fichier</quote>.</para>
youshe@989 763
youshe@990 764 <para id="x_6cf">En comparaison avec un système centralisé, un système
youshe@989 765 décentralisé de gestion de révision change certains facteurs qui
youshe@989 766 guident les décisions sur quels fichiers gérer et comment.</para>
youshe@989 767
youshe@990 768 <para id="x_6d0">Par exemple, un système distribué de gestion de révisions
youshe@990 769 ne peut pas, par sa nature, offrir un système de véroux (lock) sur les
youshe@990 770 fichiers. Il n'y a donc pas de mécanisme inclus pour empêcher deux
youshe@989 771 personnes de faire des modifications conflictuelles sur un fichier
youshe@989 772 binaire. Si vous avez une équipe où plusieurs personnes peuvent souvent
youshe@989 773 éditer un fichier binaire, cela ne serait pas une très bonne idée
youshe@990 774 d'utiliser Mercurial &emdash;ou tout autre système distribué de gestion
youshe@989 775 de révisions&emdash;pour gérer ces fichiers.</para>
youshe@989 776
youshe@989 777 <para id="x_6d1">Lorsque vous sauvegardez les modifications sur un
youshe@989 778 fichier, Mercurial ne sauvegarde d'habitude que les différences entre
youshe@989 779 la version précédente et la version actuelle d'un fichier. Pour la
youshe@989 780 plupart des fichiers texte, ceci est très efficace. Cependant, certains
youshe@989 781 fichiers (en particulier les fichiers binaires) sont construits d'une
youshe@989 782 façon que même un petit changement sur un contenu logique résulte sur
youshe@989 783 un changement de la plupart des octets du fichier. Par exemple, les
youshe@990 784 fichiers compressés sont particulièrement sujets à ce comportement. Si
youshe@990 785 les différences entre deux versions successives d'un fichier sont
youshe@990 786 toujours très grandes, Mercurial ne sera pas capable de sauvegarder
youshe@990 787 l'historique des révisions sur le fichier très efficacement. Ceci peut
youshe@990 788 affecter aussi bien les besoins pour la sauvegarde locale que le temps
youshe@990 789 nécessaire à cloner le dépôt.</para>
youshe@989 790
youshe@989 791 <para id="x_6d2">Pour avoir une idée de comment ceci pourrait vous
youshe@989 792 affecter en pratique, supposez que nous voulions que Mercurial gère des
youshe@989 793 documents OpenOffice. OpenOffice sauvegarde les documents sur le disque
youshe@989 794 comme des fichiers compressés zip. Même le fait d'éditer ces fichiers
youshe@989 795 d'une seule lettre, changera les bits de la quasi totalité du fichier
youshe@989 796 lorsque vous le sauvegarderez. Maintenant, supposez que ce fichier
youshe@989 797 fasse une taille de 2Mo. Puisque la plupart du fichier change à chaque
youshe@989 798 fois que vous sauvegardez, Mercurial aura à sauvegarder tous les 2Mo du
youshe@989 799 fichier à chaque commit, alors que de votre point de vue, il n'y a
youshe@990 800 que peu de mots qui changent à chaque fois. Un seul fichier
youshe@990 801 souvent édité qui n'est pas bien traité par les hypothèses que Mercurial
youshe@989 802 fait sur les sauvegardes peut facilement avoir un effet colossal sur la
youshe@989 803 taille du dépôt.</para>
youshe@989 804
youshe@989 805 <para id="x_6d3">Même pire, si vous et quelqu'un d'autre éditez le même
youshe@989 806 document OpenOffice sur lequel vous travaillez, il n'y a pas de façon
youshe@989 807 utile pour fusionner votre travail. En fait, il n'y a pas de moyen
youshe@989 808 utile de montrer que les différences sont faites à partir de votre
youshe@989 809 vision des modifications.</para>
youshe@989 810
youshe@990 811 <para id="x_6d4">Il y a ainsi quelques recommandations claires sur les
youshe@989 812 types de fichiers spécifiques avec lesquels faire très
youshe@989 813 attention.</para>
bos@683 814
bos@683 815 <itemizedlist>
youshe@989 816 <listitem><para id="x_6d5">Les fichier qui sont très gros et
youshe@990 817 incompressibles, comme les images ISO de CD-ROM, sont, par
youshe@989 818 construction très gros et les cloner à travers un réseau sera très
youshe@989 819 long.</para></listitem>
youshe@990 820 <!-- TODO : Trouver une meilleure traduction pour : ISO CD-ROM images, will by
youshe@989 821 virtue of sheer size make clones over a network very slow. -->
youshe@989 822 <listitem><para id="x_6d6">Les fichiers qui changent beaucoup d'une
youshe@989 823 révision à l'autre peuvent être très chers à sauvegarder si vous
youshe@990 824 les éditez fréquemment, de même que les conflits entre deux éditions
youshe@989 825 concurrentes peuvent être difficiles à résoudre.</para>
bos@683 826 </listitem>
bos@683 827 </itemizedlist>
bos@683 828 </sect1>
bos@683 829
bos@683 830 <sect1>
youshe@989 831 <title>Sauvegardes et miroirs</title>
youshe@989 832
youshe@989 833 <para id="x_6d7">Puisque Mercurial maintient une copie complète de
youshe@989 834 l'historique de chaque clone, toute personne qui utilise Mercurial pour
youshe@989 835 collaborer à un projet peut potentiellement agir comme une source de
youshe@990 836 sauvegarde si une catastrophe survenait. Si un dépôt central devient
youshe@989 837 indisponible, vous pouvez construire un remplaçant en clonant une copie
youshe@989 838 du dépôt à partir d'un des contributeurs en récupérant (pull) tous les
youshe@989 839 changements qui n'auraient pas été vus par les autres.</para>
youshe@989 840
youshe@989 841 <para id="x_6d8">Il est simple d'utiliser Mercurial pour construire des
youshe@989 842 serveurs hors site de sauvegarde et des miroirs distants. Initiez une
youshe@989 843 tâche périodique (ex. via la commande <command>cron</command>) sur un
youshe@989 844 serveur distant pour récupérer (pull) les changements de votre dépôt
youshe@990 845 distant chaque heure. Ceci sera difficile seulement dans le cas
youshe@989 846 improbable où le nombre des dépôts maîtres que vous maintenez change
youshe@989 847 souvent, auquel cas vous aurez besoin de faire un peu de scripting pour
youshe@990 848 rafraichir la liste des dépôt à sauvegarder.</para>
youshe@989 849
youshe@989 850 <para id="x_6d9">Si vous exécutez des sauvegardes traditionnelles de
youshe@990 851 votre dépôt maître sur bande ou disque, et que vous voulez sauvegarder
youshe@990 852 un dépôt nommé <filename>myrepo</filename>, utilisez la commande
youshe@990 853 <command>hg clone -U myrepo myrepo.bak</command> pour créer un clone de
youshe@990 854 <filename>myrepo</filename> avant de commencer vos backups.
youshe@989 855 L'option <option>-U</option> ne crée pas de répertoire de travail après
youshe@989 856 que le clone soit accompli, puisque ceci serait superflu et ferait que
youshe@989 857 la sauvegarde prenne plus de temps.</para>
youshe@989 858
youshe@989 859 <para id="x_6da">Si vous voulez ensuite sauvegarder
youshe@989 860 <filename>myrepo.bak</filename> au lieu de <filename>myrepo</filename>,
youshe@990 861 vous aurez la garantie d'avoir une image (snapshot) consistante de
youshe@990 862 votre dépôt sur lequel un développeur insomniaque n'enverra (push) pas de
youshe@989 863 changements en milieu de sauvegarde.</para>
bos@683 864 </sect1>
bos@559 865 </chapter>
bos@559 866
bos@559 867 <!--
bos@559 868 local variables:
bos@559 869 sgml-parent-document: ("00book.xml" "book" "chapter")
bos@559 870 end:
bos@559 871 -->