hgbook
annotate fr/ch05-daily.xml @ 1114:527b86d55d4a
inotify: update installation information
inotify is shipped in Mercurial since 1.0, which greatly simplifies the installation process
inotify is shipped in Mercurial since 1.0, which greatly simplifies the installation process
author | Nicolas Dumazet <nicdumz.commits@gmail.com> |
---|---|
date | Sun Dec 13 16:35:56 2009 +0900 (2009-12-13) |
parents | 6f8c48362758 |
children |
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"?> |
andre@1018 | 5 <title>Utilisation quotidienne de Mercurial</title> |
bos@559 | 6 |
bos@559 | 7 <sect1> |
andre@1018 | 8 <title>Informer Mercurial des fichiers à 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) |
andre@1018 | 31 modifiés, supprimés ou renommés. Si vous avez 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 |
andre@1018 | 182 <para id="x_1b8">D'un autre côté, 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> |
andre@1018 | 192 <title>Aparté : Pourquoi dire explicitement à Mercurial de supprimer un |
youshe@988 | 193 fichier ?</title> |
andre@1018 | 194 <!-- TODO Choisir une traduction commune à tous les chapitres pour Aside --> |
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 |
andre@1018 | 198 laissait pourtant supprimer un fichier sans souci ; 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"> |
andre@1018 | 289 <title>Pourquoi les changements devraient-ils suivre les copies ?</title> |
andre@1018 | 290 |
andre@1018 | 291 <para id="x_1c4">Ce comportement&emdash;des changements d'un fichier |
youshe@988 | 292 qui se propagent aux copies de ce fichier&emdash;peut sembler |
andre@1018 | 293 ésotérique, mais, dans la plupart des cas, c'est fortement |
andre@1018 | 294 souhaitable.</para> |
andre@1018 | 295 |
andre@1018 | 296 <para id="x_1c5">Pour commencer, souvenez-vous que cette propagation |
andre@1018 | 297 a lieu <emphasis>seulement</emphasis> lors des fusions (merge). |
youshe@988 | 298 Donc, si vous faites un <command role="hg-cmd">hg copy</command> sur |
youshe@988 | 299 un fichier, et par la suite modifiez le fichier original durant le |
andre@1018 | 300 cours normal de votre travail, rien n'aura lieu.</para> |
andre@1018 | 301 |
andre@1018 | 302 <para id="x_1c6">La deuxième chose à savoir est que les modifications |
youshe@988 | 303 ne se propageront à travers une copie que si le changeset à partir |
youshe@988 | 304 duquel vous faites une fusion (merge) <emphasis>n'a pas encore |
youshe@988 | 305 vu</emphasis> la copie.</para> |
youshe@988 | 306 |
youshe@988 | 307 <para id="x_1c7">La raison pour laquelle Mercurial fait ainsi est une |
youshe@990 | 308 règle. Imaginons que je corrige un important bug dans un fichier source |
youshe@990 | 309 et que je commit mes changements. Pendant ce temps, vous avez décidé de |
youshe@988 | 310 faire un <command role="hg-cmd">hg copy</command> du fichier dans |
youshe@990 | 311 votre dépôt, sans rien savoir au sujet du bug ou à propos de la |
youshe@990 | 312 correction. Vous avez alors commencé à "hacker" sur votre copie du |
youshe@990 | 313 fichier.</para> |
youshe@988 | 314 |
youshe@988 | 315 <para id="x_1c8">Si vous aviez récupéré (pull) et fusionné (merge) mes |
youshe@988 | 316 changements, et que Mercurial <emphasis>n'avait pas</emphasis> |
youshe@988 | 317 propagé les changements à travers les copies, votre nouveau fichier |
youshe@990 | 318 source contiendrait maintenant le bug, et à moins que vous ne sachiez |
youshe@988 | 319 qu'il faille propager la correction du bug à la main, le bug aurait |
youshe@988 | 320 <emphasis>subsisté</emphasis> dans votre copie du fichier.</para> |
youshe@988 | 321 |
youshe@988 | 322 <para id="x_1c9">En propageant automatiquement les changements qui |
youshe@988 | 323 fixent les bugs à partir du fichier original vers les copies, |
andre@1018 | 324 Mercurial prévient ce type de problèmes. À ma connaissance, Mercurial |
youshe@988 | 325 est le <emphasis>seul</emphasis> système de gestion de révisions qui |
youshe@988 | 326 propage les changements à travers les copies comme ceci.</para> |
youshe@988 | 327 |
youshe@988 | 328 <para id="x_1ca">Une fois que votre historique des changements a un |
youshe@990 | 329 enregistrement concernant une copie et qu'une fusion postérieure a |
andre@1018 | 330 eu lieu, il n'y a d'habitude pas d'autre besoin de propager les |
youshe@990 | 331 changements du fichier originel vers le fichier copié. C'est pourquoi |
youshe@990 | 332 Mercurial ne propage les changements à travers les copies qu'à la |
andre@1018 | 333 première fusion, et pas après.</para> |
youshe@988 | 334 </sect2> |
youshe@988 | 335 |
youshe@988 | 336 <sect2> |
youshe@988 | 337 <title>Comment faire des changements qui <emphasis>ne</emphasis> |
youshe@988 | 338 suivent <emphasis>pas</emphasis> une copie</title> |
youshe@988 | 339 |
youshe@988 | 340 <para id="x_1cb">Si pour une raison ou une autre, vous décidez que |
youshe@988 | 341 cette fonctionnalité de propager automatiquement les changements à |
youshe@988 | 342 travers les copies n'est pas pour vous, utilisez simplement la |
youshe@988 | 343 commande normale de copie de votre système (sur les systèmes de type |
youshe@988 | 344 Unix, il s'agit de <command>cp</command>) pour faire une copie d'un |
youshe@988 | 345 fichier. Utilisez ensuite <command role="hg-cmd">hg add</command> |
youshe@988 | 346 pour ajouter les nouveaux fichiers à la main. Cependant, avant d'en |
youshe@988 | 347 faire ainsi, relisez <xref linkend="sec:daily:why-copy"/>, et faites |
youshe@990 | 348 un choix en connaissance de cause comme quoi cette fonctionnalité |
youshe@990 | 349 n'est pas appropriée à votre cas spécifique.</para> |
youshe@988 | 350 |
youshe@988 | 351 </sect2> |
youshe@988 | 352 <sect2> |
youshe@988 | 353 <title>Comportement de la commande <command role="hg-cmd">hg copy</command></title> |
youshe@988 | 354 |
youshe@988 | 355 <para id="x_1cc">Lorsque vous utilisez la commande <command |
youshe@988 | 356 role="hg-cmd">hg copy</command>, Mercurial crée une copie de chaque |
youshe@988 | 357 fichier source tel qu'il est actuellement dans le répertoire de |
youshe@990 | 358 travail. Cela signifie que si vous effectuez des modifications sur un |
youshe@988 | 359 fichier, puis faites un <command role="hg-cmd">hg copy</command> sur |
youshe@990 | 360 celui-ci sans avoir au préalable committé ces changements, la nouvelle |
youshe@988 | 361 copie contiendra aussi les modifications que vous avez fait jusqu'à |
youshe@990 | 362 ce point. (Je trouve ce comportement quelque peu contre intuitif, |
youshe@990 | 363 c'est pourquoi j'en fais mention ici.)</para> |
youshe@990 | 364 <!-- Vérifier que je n'ai pas fait de contre sens en relisant la |
youshe@990 | 365 version anglaise, ce que je comprend ici me paraît un peu bizarre --> |
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@990 | 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@990 | 413 essentiellement 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@990 | 418 role="hg-cmd">hg rename</command>, Mercurial crée une copie de tous |
youshe@990 | 419 les fichiers sources, 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@990 | 425 montre les nouveaux fichiers comme ajoutés et les fichiers originaux |
youshe@990 | 426 comme supprimés.</para> |
bos@567 | 427 |
bos@567 | 428 &interaction.daily.rename.status; |
bos@567 | 429 |
andre@1018 | 430 <para id="x_1d5">À 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@990 | 432 pour la commande <command role="hg-cmd">hg status</command> afin |
youshe@990 | 433 d'observer que le fichier ajouté est bien suivi par Mercurial comme |
youshe@990 | 434 étant une copie de 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 |
andre@1018 | 440 Mercurial d'un renommage après coup en utilisant l'option |
andre@1018 | 441 <option role="hg-opt-rename">--after</option>. Dans la plupart des autres |
andre@1018 | 442 situations, le comportement de la commande <command role="hg-cmd">hg |
andre@1018 | 443 rename</command>, et les options qu'elle accepte sont similaires à la |
youshe@988 | 444 commande <command role="hg-cmd">hg copy</command>.</para> |
youshe@988 | 445 |
youshe@990 | 446 <para id="x_686">Si vous êtes familier 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 |
andre@1018 | 454 <para id="x_1d7">Puisque le <quote>rename</quote> de Mercurial est implanté comme un |
andre@1018 | 455 <quote>copy-and-remove</quote>, la même propagation des changements a lieu après |
andre@1018 | 456 un <quote>rename</quote> qu'après un <quote>copy</quote> lorsque vous fusionnez (merge).</para> |
youshe@988 | 457 |
youshe@988 | 458 <para id="x_1d8">Si je modifie un fichier et que vous le renommez, si |
youshe@988 | 459 ensuite nous fusionnons nos changements respectifs, mes modifications |
youshe@988 | 460 sur le fichier sous son nom originel seront propagés vers le même |
youshe@988 | 461 fichier sous son nouveau nom. (C'est quelque chose que vous pourriez |
youshe@988 | 462 espérer voir <quote>fonctionner simplement</quote>, mais tous les |
youshe@988 | 463 systèmes de gestion de version ne le font pas.)</para> |
youshe@988 | 464 |
youshe@988 | 465 <para id="x_1d9">Tandis qu'avoir des changements qui suivent une copie |
youshe@988 | 466 est une fonctionnalité où vous hocheriez sûrement la tête en disant |
youshe@988 | 467 <quote>oui, cela pourrait être utile</quote>, il est clair que les |
andre@1018 | 468 voir suivre un renommage est sans aucun doute important. Sans cette |
andre@1018 | 469 facilité, il serait vraiment trop facile d'avoir des changements |
youshe@988 | 470 qui deviennent orphelins lorsque des fichiers sont renommés.</para> |
youshe@988 | 471 </sect2> |
youshe@988 | 472 |
youshe@988 | 473 <sect2> |
youshe@988 | 474 <title>Renommages divergeants et fusion (merge)</title> |
youshe@988 | 475 |
youshe@988 | 476 <para id="x_1da">Le cas de noms divergeants a lieu lorsque deux |
youshe@990 | 477 développeurs commencent avec un fichier&emdash;appelons le |
youshe@988 | 478 <filename>foo</filename>&emdash;dans leurs dépôts respectifs.</para> |
bos@559 | 479 |
bos@567 | 480 &interaction.rename.divergent.clone; |
bos@567 | 481 |
youshe@988 | 482 <para id="x_1db">Anne renomme le fichier en |
youshe@988 | 483 <filename>bar</filename>.</para> |
bos@567 | 484 |
bos@567 | 485 &interaction.rename.divergent.rename.anne; |
bos@567 | 486 |
youshe@988 | 487 <para id="x_1dc">Pendant ce temps, Bob le renomme en |
andre@1018 | 488 <filename>quux</filename>. (Souvenez-vous que <command |
youshe@988 | 489 role="hg-cmd">hg mv</command> est un alias pour <command |
youshe@988 | 490 role="hg-cmd">hg rename</command>.)</para> |
youshe@988 | 491 |
youshe@988 | 492 &interaction.rename.divergent.rename.bob; |
youshe@988 | 493 |
youshe@988 | 494 <para id="x_1dd">J'aime à penser qu'il s'agit d'un conflit puisque |
youshe@988 | 495 chaque développeur a exprimé différentes intentions au sujet de ce |
youshe@988 | 496 que le nom de ce fichier aurait du être.</para> |
youshe@988 | 497 |
andre@1018 | 498 <para id="x_1de">Que pensez-vous qu'il devrait se produire lorsqu'ils |
youshe@988 | 499 fusionnent (merge) leurs travaux ? Le comportement actuel de |
youshe@988 | 500 Mercurial est qu'il préserve toujours les <emphasis>deux</emphasis> |
youshe@988 | 501 noms lorsqu'il fusionne (merge) des changesets qui contiennent des |
youshe@988 | 502 renommages divergeants.</para> |
bos@567 | 503 |
bos@567 | 504 &interaction.rename.divergent.merge; |
bos@559 | 505 |
youshe@988 | 506 <para id="x_1df">Remarquez que bien que Mercurial vous avertisse au |
youshe@988 | 507 sujet de la divergeance des renommages, il vous laisse faire quelque |
andre@1018 | 508 chose au sujet de la divergence après la fusion (merge).</para> |
youshe@988 | 509 </sect2> |
youshe@988 | 510 |
youshe@988 | 511 <sect2> |
youshe@988 | 512 <title>Renommages et fusion convergeants</title> |
youshe@988 | 513 |
youshe@988 | 514 <para id="x_1e0">Un autre type de conflit de renommage intervient |
andre@1018 | 515 lorsque deux personnes choisissent de renommer différents fichiers |
youshe@988 | 516 <emphasis>source</emphasis> vers la même |
youshe@988 | 517 <emphasis>destination</emphasis>. Dans ce cas, Mercurial exécute la |
youshe@988 | 518 machinerie normale de fusion (merge) et vous guide vers une |
youshe@988 | 519 solution convenable.</para> |
youshe@988 | 520 </sect2> |
youshe@988 | 521 |
youshe@988 | 522 <sect2> |
andre@1018 | 523 <title>Autres cas épineux relatifs aux noms</title> |
youshe@988 | 524 |
youshe@988 | 525 <para id="x_1e1">Mercurial possède un bug de longue date dans lequel il |
andre@1018 | 526 échoue à traiter une fusion (merge) où un côté a un fichier avec un |
andre@1018 | 527 nom donné, alors que l'autre côté possède un répertoire avec le même nom. |
youshe@988 | 528 Ceci est documenté dans l'<ulink role="hg-bug" |
youshe@988 | 529 url="http://www.selenic.com/mercurial/bts/issue29">issue |
youshe@988 | 530 29</ulink>.</para> |
bos@567 | 531 |
bos@567 | 532 &interaction.issue29.go; |
bos@559 | 533 |
bos@559 | 534 </sect2> |
bos@559 | 535 </sect1> |
bos@559 | 536 <sect1> |
youshe@988 | 537 <title>Récupération d'erreurs</title> |
youshe@988 | 538 |
youshe@988 | 539 <para id="x_1e2">Mercurial possède certaines commandes utiles qui vont |
youshe@990 | 540 vous aider à récupérer de certaines erreurs communes.</para> |
youshe@988 | 541 |
youshe@988 | 542 <para id="x_1e3">La commande <command role="hg-cmd">hg revert</command> |
youshe@990 | 543 vous permet d'annuler les changements que vous avez faits dans votre |
youshe@988 | 544 répertoire de travail. Par exemple, si vous faites un <command |
youshe@988 | 545 role="hg-cmd">hg add</command> sur un fichier par accident, exécutez |
andre@1018 | 546 juste <command role="hg-cmd">hg revert</command> avec le nom du fichier |
youshe@990 | 547 que vous avez ajouté et tandis que le fichier ne sera touché d'une |
youshe@988 | 548 quelconque manière, il ne sera plus suivi comme ajouté par Mercurial. |
youshe@988 | 549 Vous pouvez aussi utiliser la commande <command role="hg-cmd">hg |
andre@1018 | 550 revert</command> pour vous débarrasser de modifications erronées |
youshe@988 | 551 apportées à un fichier.</para> |
youshe@988 | 552 |
youshe@988 | 553 <para id="x_1e4">Il est utile de se souvenir que la commande <command |
youshe@988 | 554 role="hg-cmd">hg revert</command> est utile pour les modifications |
youshe@990 | 555 qui n'ont pas encore été committées. Une fois que vous avez committé un |
youshe@988 | 556 changement, si vous décidez qu'il s'agissait d'une erreur, vous pouvez |
youshe@990 | 557 toujours faire quelque chose à ce sujet, bien que vos options soient |
youshe@988 | 558 un peu plus limitées.</para> |
youshe@988 | 559 |
youshe@988 | 560 <para id="x_1e5">Pour plus d'informations au sujet de la commande |
youshe@988 | 561 <command role="hg-cmd">hg revert</command>, et des détails sur comment |
youshe@988 | 562 traiter les modifications que vous avez déjà committées, référez vous à |
youshe@988 | 563 <xref linkend="chap:undo"/>.</para> |
bos@674 | 564 </sect1> |
bos@674 | 565 |
bos@674 | 566 <sect1> |
youshe@988 | 567 <title>Traiter avec les fusions (merge) malicieuses</title> |
youshe@988 | 568 |
youshe@988 | 569 <para id="x_687">Dans des projets compliqués ou conséquents, il n'est pas |
youshe@988 | 570 rare qu'une fusion (merge) de deux changesets finisse par une migraine. |
youshe@990 | 571 Supposez qu'il y ait un gros fichier source qui ait été largement édité de |
youshe@988 | 572 chaque coté de la fusion (merge) : ceci va inévitablement résulter en |
youshe@990 | 573 conflits, dont certains peuvent prendre plusieurs essais pour s'en |
youshe@988 | 574 sortir.</para> |
youshe@988 | 575 |
youshe@990 | 576 <para id="x_688">Développons en un cas simple pour voir comment le gérer. |
youshe@990 | 577 Nous allons commencer avec un dépôt contenant un fichier, et le |
youshe@988 | 578 cloner deux fois.</para> |
bos@674 | 579 |
bos@674 | 580 &interaction.ch04-resolve.init; |
bos@674 | 581 |
youshe@988 | 582 <para id="x_689">Dans un des clones, nous allons modifier le fichier |
youshe@988 | 583 d'une façon.</para> |
bos@674 | 584 |
bos@674 | 585 &interaction.ch04-resolve.left; |
bos@674 | 586 |
youshe@988 | 587 <para id="x_68a">Dans un autre, nous allons modifier le fichier |
youshe@990 | 588 différemment.</para> |
bos@674 | 589 |
bos@674 | 590 &interaction.ch04-resolve.right; |
bos@674 | 591 |
youshe@988 | 592 <para id="x_68b">Ensuite, nous allons récupérer (pull) chaque ensemble de |
youshe@988 | 593 changement dans notre dépôt original.</para> |
bos@674 | 594 |
bos@674 | 595 &interaction.ch04-resolve.pull; |
bos@674 | 596 |
youshe@988 | 597 <para id="x_68c">Nous nous attendons à ce que notre dépôt contienne deux |
youshe@990 | 598 "heads".</para> |
bos@674 | 599 |
bos@674 | 600 &interaction.ch04-resolve.heads; |
bos@674 | 601 |
youshe@988 | 602 <para id="x_68d">Normalement, si nous lançons <command role="hg-cmd">hg |
youshe@988 | 603 merge</command> à ce point, il nous renverra vers une interface |
youshe@988 | 604 utilisateur qui nous permettra de résoudre manuellement les éditions |
youshe@988 | 605 conflictuelles sur le fichier <filename>myfile.txt</filename>. |
youshe@990 | 606 Cependant, pour simplifier ici les choses dans la présentation, nous |
youshe@990 | 607 aimerions plutôt que la fusion (merge) échoue immédiatement. Voici une |
youshe@988 | 608 façon de le faire.</para> |
bos@674 | 609 |
bos@674 | 610 &interaction.ch04-resolve.export; |
bos@674 | 611 |
youshe@990 | 612 <para id="x_68e">Nous avons dit au processus de fusion de Mercurial |
youshe@988 | 613 d'exécuter la commande <command>false</command> (qui échoue |
youshe@988 | 614 immédiatement, à la demande) s'il détecte une fusion (merge) qu'il ne |
youshe@988 | 615 peut pas arranger automatiquement.</para> |
youshe@988 | 616 |
youshe@988 | 617 <para id="x_68f">Si nous appelons maintenant <command role="hg-cmd">hg |
youshe@990 | 618 merge</command>, il devrait échouer et reporter une erreur.</para> |
bos@674 | 619 |
bos@674 | 620 &interaction.ch04-resolve.merge; |
bos@674 | 621 |
youshe@988 | 622 <para id="x_690">Même si nous ne remarquons pas qu'une fusion (merge) a |
youshe@990 | 623 échoué, Mercurial nous empêchera de committer le résultat d'une fusion |
youshe@988 | 624 ratée.</para> |
bos@674 | 625 |
bos@674 | 626 &interaction.ch04-resolve.cifail; |
bos@674 | 627 |
youshe@988 | 628 <para id="x_691">Lorsque <command role="hg-cmd">hg commit</command> |
youshe@988 | 629 échoue dans ce cas, il suggère que nous utilisons la commande peu |
andre@1018 | 630 connue <command role="hg-cmd">hg resolve</command>. Comme d'habitude, |
youshe@988 | 631 <command role="hg-cmd">hg help resolve</command> affichera une aide |
youshe@988 | 632 sommaire.</para> |
bos@674 | 633 |
bos@674 | 634 <sect2> |
youshe@990 | 635 <title>États de résolution des fichiers</title> |
youshe@989 | 636 <!-- TODO Vérifier traduction : File resolution states --> |
youshe@989 | 637 |
youshe@990 | 638 <para id="x_692">Lorsqu'une fusion intervient, la plupart des fichiers |
youshe@989 | 639 vont, la plupart du temps, rester sans modification. Pour chaque |
youshe@989 | 640 fichier sur lequel Mercurial doit faire quelque chose, il suit l'état |
youshe@989 | 641 de celui-ci.</para> |
bos@674 | 642 |
bos@674 | 643 <itemizedlist> |
youshe@989 | 644 <listitem><para id="x_693">Un fichier |
youshe@989 | 645 <quote><emphasis>resolved</emphasis></quote> a été fusionné |
youshe@989 | 646 (merge) avec succès, que ce soit automatiquement par Mercurial ou |
youshe@989 | 647 manuellement par une intervention humaine.</para></listitem> |
youshe@989 | 648 <listitem><para id="x_694">Un fichier |
youshe@989 | 649 <quote><emphasis>unresolved</emphasis></quote> n'a pas été |
youshe@989 | 650 fusionné (merge) correctement et a besoin de plus |
youshe@989 | 651 d'attention.</para> |
youshe@989 | 652 </listitem> |
bos@674 | 653 </itemizedlist> |
bos@674 | 654 |
youshe@990 | 655 <para id="x_695">Si Mercurial voit un fichier |
youshe@990 | 656 <emphasis>quelconque</emphasis> dans un état |
youshe@990 | 657 <quote>unresolved</quote> après une fusion (merge), il considère que |
youshe@990 | 658 la fusion (merge) a échoué. Heureusement, nous n'avons pas à |
youshe@990 | 659 recommencer la procédure à partir du début.</para> |
youshe@989 | 660 |
youshe@989 | 661 <para id="x_696">L'option <option role="hg-opt-resolve">--list</option> |
youshe@989 | 662 ou <option role="hg-opt-resolve">-l</option> passée à <command |
youshe@989 | 663 role="hg-cmd">hg resolve</command> liste l'état de chaque fichier |
youshe@989 | 664 fusionné (merge).</para> |
bos@674 | 665 |
bos@674 | 666 &interaction.ch04-resolve.list; |
bos@674 | 667 |
youshe@989 | 668 <para id="x_697">En sortie de <command role="hg-cmd">hg |
andre@1018 | 669 resolve</command>, un fichier <quote>resolved</quote> est marqué avec un |
andre@1018 | 670 <literal>R</literal>, alors qu'un fichier <quote>unresolved</quote> est marqué |
youshe@989 | 671 d'un <literal>U</literal>. S'il existe un fichier listé avec un |
youshe@989 | 672 <literal>U</literal>, nous savons qu'essayer de committer le résultat |
youshe@990 | 673 de la fusion (merge) échouera.</para> |
youshe@989 | 674 </sect2> |
youshe@989 | 675 |
youshe@989 | 676 <sect2> |
youshe@989 | 677 <title>Résoudre une fusion de fichier</title> |
youshe@989 | 678 |
youshe@989 | 679 <para id="x_698">Nous avons plusieurs options pour changer l'état d'un |
andre@1018 | 680 fichier de <quote>unresolved</quote> à <quote>resolved</quote>. |
andre@1018 | 681 Le plus habituel est de relancer |
youshe@989 | 682 <command role="hg-cmd">hg resolve</command>. Si nous passons les noms |
youshe@989 | 683 des fichiers individuels ou des répertoires, ceci retentera la fusion |
youshe@989 | 684 de tous les fichiers présents à cet endroit. Nous pouvons aussi |
youshe@989 | 685 passer l'option <option role="hg-opt-resolve">--all</option> ou |
youshe@989 | 686 <option role="hg-opt-resolve">-a</option> qui tentera de fusionner |
andre@1018 | 687 <emphasis>tous</emphasis> les fichiers <quote>unresolved</quote>.</para> |
youshe@989 | 688 |
youshe@989 | 689 <para id="x_699">Mercurial nous laisse aussi modifier la résolution |
andre@1018 | 690 d'un fichier directement. Nous pouvons marquer un fichier <quote>resolved</quote> |
youshe@989 | 691 en utilisant l'option <option role="hg-opt-resolve">--mark</option>, |
andre@1018 | 692 ou <quote>unresolved</quote> en utilisant l'option <option |
youshe@989 | 693 role="hg-opt-resolve">--unmark</option>. Ceci nous autorise à |
youshe@990 | 694 nettoyer une fusion particulièrement compliquée à la main, et de |
youshe@989 | 695 garder un suivi de nos progrès avec chaque fichier pendant que nous |
andre@1018 | 696 avançons.</para> |
bos@674 | 697 </sect2> |
bos@559 | 698 </sect1> |
bos@683 | 699 |
bos@683 | 700 <sect1> |
andre@1018 | 701 <title>Des <quote>diffs</quote> plus utiles</title> |
youshe@989 | 702 |
youshe@989 | 703 <para id="x_6c7">La sortie par défaut de la commande <command |
youshe@990 | 704 role="hg-cmd">hg diff</command> est compatible rétrospectivement avec |
youshe@990 | 705 la commande régulière <command>diff</command>, mais ceci a quelques |
youshe@990 | 706 inconvénients.</para> |
youshe@989 | 707 |
youshe@989 | 708 <para id="x_6c8">Considérez le cas où nous utilisons <command role="hg-cmd">hg |
youshe@989 | 709 rename</command> pour renommer un fichier.</para> |
bos@683 | 710 |
bos@683 | 711 &interaction.ch04-diff.rename.basic; |
bos@683 | 712 |
youshe@990 | 713 <para id="x_6c9">La sortie de <command role="hg-cmd">hg diff</command> |
youshe@990 | 714 ci-dessus cache le fait que nous avons simplement renommé un fichier. |
youshe@990 | 715 La commande <command role="hg-cmd">hg diff</command> accepte l'option |
youshe@989 | 716 <option>--git</option> ou <option>-g</option> pour utiliser un nouveau |
youshe@989 | 717 format de diff qui montre ces informations sous une forme plus |
youshe@989 | 718 expressive.</para> |
bos@683 | 719 |
bos@683 | 720 &interaction.ch04-diff.rename.git; |
bos@683 | 721 |
andre@1018 | 722 <para id="x_6ca">Cette option peut aussi aider avec le cas qui peut être autrement |
andre@1018 | 723 perturbant : un fichier qui apparaît comme étant modifié en accord avec |
youshe@989 | 724 <command role="hg-cmd">hg status</command>, mais où <command |
youshe@989 | 725 role="hg-cmd">hg diff</command> n'affiche rien. Cette situation peut |
youshe@989 | 726 survenir si nous changeons les permissions d'exécution du |
youshe@989 | 727 fichier.</para> |
bos@683 | 728 |
bos@683 | 729 &interaction.ch04-diff.chmod; |
bos@683 | 730 |
youshe@989 | 731 <para id="x_6cb">La commande normale <command>diff</command> ne fait pas |
youshe@989 | 732 attention aux permissions des fichiers, ce qui explique pourquoi |
youshe@989 | 733 <command role="hg-cmd">hg diff</command> n'affiche rien du tout par |
youshe@989 | 734 défaut. Si nous lui passons l'option <option>-g</option>, ceci nous |
andre@1018 | 735 informe de ce qui s'est vraiment passé.</para> |
bos@683 | 736 |
bos@683 | 737 &interaction.ch04-diff.chmod.git; |
bos@683 | 738 </sect1> |
bos@683 | 739 |
bos@683 | 740 <sect1> |
youshe@990 | 741 <title>Quels fichiers suivre et lesquels éviter</title> |
youshe@989 | 742 |
youshe@989 | 743 <para id="x_6cc">Les systèmes de gestion de révisions sont en général |
youshe@989 | 744 meilleurs pour gérer les fichiers textes qui sont écrits par les |
youshe@989 | 745 humains, comme le code source, où les fichiers ne changent pas |
youshe@989 | 746 énormément d'une révision à l'autre. Certains systèmes de gestion de |
youshe@990 | 747 révisions centralisés peuvent aussi traiter très convenablement les |
youshe@990 | 748 fichiers binaires, tels que les images bitmap.</para> |
youshe@989 | 749 |
youshe@989 | 750 <para id="x_6cd">Par exemple, une équipe de développement de jeux va |
youshe@990 | 751 probablement gérer les deux types : ses codes source et tous ses binaires |
youshe@989 | 752 (ex. données géométriques, textures, schémas de cartes) dans un système |
youshe@989 | 753 de contrôle de révisions.</para> |
youshe@989 | 754 <!-- Vérifier la traduction de map layouts que j'ai traduit par schémas |
youshe@989 | 755 de cartes --> |
youshe@989 | 756 |
youshe@989 | 757 <para id="x_6ce">Puisqu'il est d'habitude impossible de fusionner (merge) |
youshe@989 | 758 deux modifications conflictuelles sur un fichier binaire, les systèmes |
youshe@990 | 759 de version centralisés offrent souvent un mécanisme de verrou (lock) qui |
youshe@989 | 760 permet à un utilisateur de dire <quote>Je suis la seule personne qui |
youshe@989 | 761 peut éditer ce fichier</quote>.</para> |
youshe@989 | 762 |
youshe@990 | 763 <para id="x_6cf">En comparaison avec un système centralisé, un système |
youshe@989 | 764 décentralisé de gestion de révision change certains facteurs qui |
youshe@989 | 765 guident les décisions sur quels fichiers gérer et comment.</para> |
youshe@989 | 766 |
youshe@990 | 767 <para id="x_6d0">Par exemple, un système distribué de gestion de révisions |
andre@1018 | 768 ne peut pas, par sa nature, offrir un système de verrou (lock) sur les |
youshe@990 | 769 fichiers. Il n'y a donc pas de mécanisme inclus pour empêcher deux |
youshe@989 | 770 personnes de faire des modifications conflictuelles sur un fichier |
youshe@989 | 771 binaire. Si vous avez une équipe où plusieurs personnes peuvent souvent |
youshe@989 | 772 éditer un fichier binaire, cela ne serait pas une très bonne idée |
youshe@990 | 773 d'utiliser Mercurial &emdash;ou tout autre système distribué de gestion |
youshe@989 | 774 de révisions&emdash;pour gérer ces fichiers.</para> |
youshe@989 | 775 |
youshe@989 | 776 <para id="x_6d1">Lorsque vous sauvegardez les modifications sur un |
youshe@989 | 777 fichier, Mercurial ne sauvegarde d'habitude que les différences entre |
youshe@989 | 778 la version précédente et la version actuelle d'un fichier. Pour la |
youshe@989 | 779 plupart des fichiers texte, ceci est très efficace. Cependant, certains |
youshe@989 | 780 fichiers (en particulier les fichiers binaires) sont construits d'une |
youshe@989 | 781 façon que même un petit changement sur un contenu logique résulte sur |
youshe@989 | 782 un changement de la plupart des octets du fichier. Par exemple, les |
youshe@990 | 783 fichiers compressés sont particulièrement sujets à ce comportement. Si |
youshe@990 | 784 les différences entre deux versions successives d'un fichier sont |
youshe@990 | 785 toujours très grandes, Mercurial ne sera pas capable de sauvegarder |
youshe@990 | 786 l'historique des révisions sur le fichier très efficacement. Ceci peut |
youshe@990 | 787 affecter aussi bien les besoins pour la sauvegarde locale que le temps |
youshe@990 | 788 nécessaire à cloner le dépôt.</para> |
youshe@989 | 789 |
youshe@989 | 790 <para id="x_6d2">Pour avoir une idée de comment ceci pourrait vous |
youshe@989 | 791 affecter en pratique, supposez que nous voulions que Mercurial gère des |
youshe@989 | 792 documents OpenOffice. OpenOffice sauvegarde les documents sur le disque |
youshe@989 | 793 comme des fichiers compressés zip. Même le fait d'éditer ces fichiers |
youshe@989 | 794 d'une seule lettre, changera les bits de la quasi totalité du fichier |
youshe@989 | 795 lorsque vous le sauvegarderez. Maintenant, supposez que ce fichier |
andre@1018 | 796 fasse une taille de 2 Mo. Puisque la plupart du fichier change à chaque |
andre@1018 | 797 fois que vous sauvegardez, Mercurial aura à sauvegarder tous les 2 Mo du |
youshe@989 | 798 fichier à chaque commit, alors que de votre point de vue, il n'y a |
youshe@990 | 799 que peu de mots qui changent à chaque fois. Un seul fichier |
youshe@990 | 800 souvent édité qui n'est pas bien traité par les hypothèses que Mercurial |
youshe@989 | 801 fait sur les sauvegardes peut facilement avoir un effet colossal sur la |
youshe@989 | 802 taille du dépôt.</para> |
youshe@989 | 803 |
youshe@989 | 804 <para id="x_6d3">Même pire, si vous et quelqu'un d'autre éditez le même |
youshe@989 | 805 document OpenOffice sur lequel vous travaillez, il n'y a pas de façon |
youshe@989 | 806 utile pour fusionner votre travail. En fait, il n'y a pas de moyen |
youshe@989 | 807 utile de montrer que les différences sont faites à partir de votre |
youshe@989 | 808 vision des modifications.</para> |
youshe@989 | 809 |
youshe@990 | 810 <para id="x_6d4">Il y a ainsi quelques recommandations claires sur les |
youshe@989 | 811 types de fichiers spécifiques avec lesquels faire très |
youshe@989 | 812 attention.</para> |
bos@683 | 813 |
bos@683 | 814 <itemizedlist> |
youshe@989 | 815 <listitem><para id="x_6d5">Les fichier qui sont très gros et |
youshe@990 | 816 incompressibles, comme les images ISO de CD-ROM, sont, par |
youshe@989 | 817 construction très gros et les cloner à travers un réseau sera très |
youshe@989 | 818 long.</para></listitem> |
youshe@990 | 819 <!-- TODO : Trouver une meilleure traduction pour : ISO CD-ROM images, will by |
youshe@989 | 820 virtue of sheer size make clones over a network very slow. --> |
youshe@989 | 821 <listitem><para id="x_6d6">Les fichiers qui changent beaucoup d'une |
andre@1018 | 822 révision à l'autre peuvent être très coûteux à sauvegarder si vous |
youshe@990 | 823 les éditez fréquemment, de même que les conflits entre deux éditions |
youshe@989 | 824 concurrentes peuvent être difficiles à résoudre.</para> |
bos@683 | 825 </listitem> |
bos@683 | 826 </itemizedlist> |
bos@683 | 827 </sect1> |
bos@683 | 828 |
bos@683 | 829 <sect1> |
youshe@989 | 830 <title>Sauvegardes et miroirs</title> |
youshe@989 | 831 |
youshe@989 | 832 <para id="x_6d7">Puisque Mercurial maintient une copie complète de |
youshe@989 | 833 l'historique de chaque clone, toute personne qui utilise Mercurial pour |
youshe@989 | 834 collaborer à un projet peut potentiellement agir comme une source de |
youshe@990 | 835 sauvegarde si une catastrophe survenait. Si un dépôt central devient |
youshe@989 | 836 indisponible, vous pouvez construire un remplaçant en clonant une copie |
youshe@989 | 837 du dépôt à partir d'un des contributeurs en récupérant (pull) tous les |
youshe@989 | 838 changements qui n'auraient pas été vus par les autres.</para> |
youshe@989 | 839 |
youshe@989 | 840 <para id="x_6d8">Il est simple d'utiliser Mercurial pour construire des |
youshe@989 | 841 serveurs hors site de sauvegarde et des miroirs distants. Initiez une |
youshe@989 | 842 tâche périodique (ex. via la commande <command>cron</command>) sur un |
youshe@989 | 843 serveur distant pour récupérer (pull) les changements de votre dépôt |
youshe@990 | 844 distant chaque heure. Ceci sera difficile seulement dans le cas |
youshe@989 | 845 improbable où le nombre des dépôts maîtres que vous maintenez change |
youshe@989 | 846 souvent, auquel cas vous aurez besoin de faire un peu de scripting pour |
andre@1018 | 847 rafraichir la liste des dépôts à sauvegarder.</para> |
youshe@989 | 848 |
youshe@989 | 849 <para id="x_6d9">Si vous exécutez des sauvegardes traditionnelles de |
youshe@990 | 850 votre dépôt maître sur bande ou disque, et que vous voulez sauvegarder |
youshe@990 | 851 un dépôt nommé <filename>myrepo</filename>, utilisez la commande |
youshe@990 | 852 <command>hg clone -U myrepo myrepo.bak</command> pour créer un clone de |
youshe@990 | 853 <filename>myrepo</filename> avant de commencer vos backups. |
youshe@989 | 854 L'option <option>-U</option> ne crée pas de répertoire de travail après |
youshe@989 | 855 que le clone soit accompli, puisque ceci serait superflu et ferait que |
youshe@989 | 856 la sauvegarde prenne plus de temps.</para> |
youshe@989 | 857 |
youshe@989 | 858 <para id="x_6da">Si vous voulez ensuite sauvegarder |
youshe@989 | 859 <filename>myrepo.bak</filename> au lieu de <filename>myrepo</filename>, |
andre@1018 | 860 vous aurez la garantie d'avoir une image (snapshot) cohérente de |
youshe@990 | 861 votre dépôt sur lequel un développeur insomniaque n'enverra (push) pas de |
youshe@989 | 862 changements en milieu de sauvegarde.</para> |
bos@683 | 863 </sect1> |
bos@559 | 864 </chapter> |
bos@559 | 865 |
bos@559 | 866 <!-- |
bos@559 | 867 local variables: |
bos@559 | 868 sgml-parent-document: ("00book.xml" "book" "chapter") |
bos@559 | 869 end: |
bos@559 | 870 --> |