hgbook
annotate fr/ch01-intro.xml @ 964:6b680d569bb4
deleting a bunch of files not longer necessary to build the documentation.
Adding missing newly files needed to build the documentation
Adding missing newly files needed to build the documentation
author | Romain PELISSE <belaran@gmail.com> |
---|---|
date | Sun Aug 16 04:58:01 2009 +0200 (2009-08-16) |
parents | |
children | f25ab8d4486f |
rev | line source |
---|---|
belaran@964 | 1 <!-- vim: set filetype=docbkxml shiftwidth=2 autoindent expandtab tw=77 : --> |
belaran@964 | 2 |
belaran@964 | 3 <chapter> |
belaran@964 | 4 <title>Introduction</title> |
belaran@964 | 5 <para>\label{chap:intro}</para> |
belaran@964 | 6 |
belaran@964 | 7 <sect1> |
belaran@964 | 8 <title>À propos de la gestion source</title> |
belaran@964 | 9 |
belaran@964 | 10 <para>La gestion de sources est un processus permettant de gérer différentes |
belaran@964 | 11 versions de la même information. Dans sa forme la plus simple, c'est |
belaran@964 | 12 ce que tout le monde fait manuellement : quand vous modifiez |
belaran@964 | 13 un fichier, vous le sauvegardez sous un nouveau nom contenant un numéro, |
belaran@964 | 14 à chaque fois plus grand que celui de la version précédente.</para> |
belaran@964 | 15 |
belaran@964 | 16 <para>Ce genre de gestion de version manuelle est cependant facilement sujette |
belaran@964 | 17 à des erreurs, ainsi, depuis longtemps, des logiciels existent pour |
belaran@964 | 18 résoudre cette problématique. Les premiers outils de gestion de sources |
belaran@964 | 19 étaient destinés à aider un seul utilisateur, à automatiser la gestion |
belaran@964 | 20 des versions d'un seul fichier. Dans les dernières décades, cette cible |
belaran@964 | 21 s'est largement agrandie, ils gèrent désormais de multiples fichiers, et |
belaran@964 | 22 aident un grand nombre de personnes à travailler ensemble. Les outils les |
belaran@964 | 23 plus modernes n'ont aucune difficulté à gérer plusieurs milliers de |
belaran@964 | 24 personnes travaillant ensemble sur des projets regroupant plusieurs |
belaran@964 | 25 centaines de milliers de fichiers.</para> |
belaran@964 | 26 |
belaran@964 | 27 <sect2> |
belaran@964 | 28 <title>Pourquoi utiliser un gestionnaire de source ?</title> |
belaran@964 | 29 |
belaran@964 | 30 <para>Il y a de nombreuses raisons pour que vous ou votre équipe souhaitiez |
belaran@964 | 31 utiliser un outil automatisant la gestion de version pour votre projet.</para> |
belaran@964 | 32 <itemizedlist> |
belaran@964 | 33 <listitem><para>L'outil se chargera de suivre l'évolution de votre projet, sans |
belaran@964 | 34 que vous n'ayez à le faire. Pour chaque modification, vous aurez à votre |
belaran@964 | 35 disposition un journal indiquant <emphasis>qui</emphasis> a fait quoi, <emphasis>pourquoi</emphasis> |
belaran@964 | 36 ils l'ont fait, <emphasis>quand</emphasis> ils l'ont fait, et <emphasis>ce</emphasis> qu'ils ont |
belaran@964 | 37 modifiés.</para> |
belaran@964 | 38 </listitem> |
belaran@964 | 39 <listitem><para>Quand vous travaillez avec d'autres personnes, les logiciels de |
belaran@964 | 40 gestion de source facilitent le travail collaboratif. Par exemple, quand |
belaran@964 | 41 plusieurs personnes font, plus ou moins simultanément, des modifications |
belaran@964 | 42 incompatibles, le logiciel vous aidera à identifier et à résoudre les conflits.</para> |
belaran@964 | 43 </listitem> |
belaran@964 | 44 <listitem><para>L'outil vous aidera à réparer vos erreurs. Si vous effectuez un changement |
belaran@964 | 45 qui se révèle être une erreur, vous pourrez revenir à une version |
belaran@964 | 46 antérieure d'un fichier ou même d'un ensemble de fichiers. En fait, un outil de |
belaran@964 | 47 gestion de source <emphasis>vraiment</emphasis> efficace vous permettra d'identifier à quel |
belaran@964 | 48 moment le problème est apparu (voir la section <xref linkend="sec:undo:bisect"/> pour plus |
belaran@964 | 49 de détails).</para> |
belaran@964 | 50 </listitem> |
belaran@964 | 51 <listitem><para>L'outil vous permettra aussi de travailler sur plusieurs versions différentes |
belaran@964 | 52 de votre projet et à gérer l'écart entre chacune.</para> |
belaran@964 | 53 </listitem></itemizedlist> |
belaran@964 | 54 <para>La plupart de ces raisons ont autant d'importances &emdash;du moins en théorie&emdash; que |
belaran@964 | 55 vous travailliez sur un projet pour vous, ou avec une centaine d'autres |
belaran@964 | 56 personnes. |
belaran@964 | 57 </para> |
belaran@964 | 58 |
belaran@964 | 59 <para>Une question fondamentale à propos des outils de gestion de source, qu'il s'agisse |
belaran@964 | 60 du projet d'une personne ou d'une grande équipe, est quels sont ses |
belaran@964 | 61 <emphasis>avantages</emphasis> par rapport à ses <emphasis>coûts</emphasis>. Un outil qui est difficile à |
belaran@964 | 62 utiliser ou à comprendre exigera un lourd effort d'adaptation. |
belaran@964 | 63 </para> |
belaran@964 | 64 |
belaran@964 | 65 <para>Un projet de cinq milles personnes s'effondrera très certainement de lui même |
belaran@964 | 66 sans aucun processus et outil de gestion de source. Dans ce cas, le coût |
belaran@964 | 67 d'utilisation d'un logiciel de gestion de source est dérisoire puisque |
belaran@964 | 68 <emphasis>sans</emphasis>, l'échec est presque garanti. |
belaran@964 | 69 </para> |
belaran@964 | 70 |
belaran@964 | 71 <para>D'un autre coté, un <quote>rapide hack</quote> d'une personne peut sembler un contexte |
belaran@964 | 72 bien pauvre pour utiliser un outil de gestion de source, car, bien évidement |
belaran@964 | 73 le coût d'utilisation dépasse le coût total du projet. N'est ce pas ? |
belaran@964 | 74 </para> |
belaran@964 | 75 |
belaran@964 | 76 <para>Mercurial supporte ces <emphasis>deux</emphasis> échelles de travail. Vous pouvez apprendre |
belaran@964 | 77 les bases en quelques minutes seulement, et, grâce à sa performance, vous pouvez |
belaran@964 | 78 l'utiliser avec facilité sur le plus petit des projets. Cette simplicité |
belaran@964 | 79 signifie que vous n'avez pas de concept obscurs ou de séquence de commandes |
belaran@964 | 80 défiant l'imagination, sans aucune corrélation avec \emph{ce que vous êtes |
belaran@964 | 81 vraiment en train de faire}. En même temps, ces mêmes performances et sa |
belaran@964 | 82 nature <quote>peer-to-peer</quote> vous permettent d'augmenter, sans difficulté, son |
belaran@964 | 83 utilisation à de très grands projets. |
belaran@964 | 84 </para> |
belaran@964 | 85 |
belaran@964 | 86 <para>Aucun outil de gestion de source ne peut sauver un projet mal mené, mais un |
belaran@964 | 87 bon outil peut rendre beaucoup plus fluide votre travail. |
belaran@964 | 88 </para> |
belaran@964 | 89 |
belaran@964 | 90 </sect2> |
belaran@964 | 91 <sect2> |
belaran@964 | 92 <title>Les multiples noms de la gestion de source</title> |
belaran@964 | 93 |
belaran@964 | 94 <para>La gestion de source\footnote{NdT: J'ai utilisé systématiquement le terme |
belaran@964 | 95 <quote>gestion de source</quote> à travers tout l'ouvrage. Ce n'est pas forcement la |
belaran@964 | 96 meilleure traduction, et ceci peut rendre la lecture un peu lourde, mais je |
belaran@964 | 97 pense que le document y gagne en clarté et en précision.} est un domaine |
belaran@964 | 98 divers, tellement qu'il n'existe pas une seul nom ou acronyme pour le désigner. |
belaran@964 | 99 Voilà quelqu'uns des noms ou |
belaran@964 | 100 acronymes que vous rencontrerez le plus souvent\footnote{NdT: J'ai conservé la |
belaran@964 | 101 liste des noms en anglais pour des raisons de commodité (ils sont plus |
belaran@964 | 102 <quote>googelable</quote>). En outre, j'ai opté pour conserver l'ensemble des opérations de |
belaran@964 | 103 Mercurial (\textit{commit},\textit{push}, \textit{pull},...) en anglais, là |
belaran@964 | 104 aussi pour faciliter la lecture d'autres documents en anglais, ainsi que |
belaran@964 | 105 l'utilisation de Mercurial}. |
belaran@964 | 106 </para> |
belaran@964 | 107 |
belaran@964 | 108 <para>: |
belaran@964 | 109 </para> |
belaran@964 | 110 <itemizedlist> |
belaran@964 | 111 <listitem><para>\textit{Revision control (RCS)} ; |
belaran@964 | 112 </para> |
belaran@964 | 113 </listitem> |
belaran@964 | 114 <listitem><para>Software configuration management (SCM), ou \textit{configuration management} ; |
belaran@964 | 115 </para> |
belaran@964 | 116 </listitem> |
belaran@964 | 117 <listitem><para>\textit{Source code management} ; |
belaran@964 | 118 </para> |
belaran@964 | 119 </listitem> |
belaran@964 | 120 <listitem><para>\textit{Source code control}, ou \textit{source control} ; |
belaran@964 | 121 </para> |
belaran@964 | 122 </listitem> |
belaran@964 | 123 <listitem><para>\textit{Version control (VCS)}. |
belaran@964 | 124 </para> |
belaran@964 | 125 </listitem></itemizedlist> |
belaran@964 | 126 |
belaran@964 | 127 <para>Certaines personnes prétendent que ces termes ont en fait des sens |
belaran@964 | 128 différents mais en pratique ils se recouvrent tellement qu'il n'y a pas |
belaran@964 | 129 réellement de manière pertinente de les distinguer. |
belaran@964 | 130 </para> |
belaran@964 | 131 |
belaran@964 | 132 </sect2> |
belaran@964 | 133 </sect1> |
belaran@964 | 134 <sect1> |
belaran@964 | 135 <title>Une courte histoire de la gestion de source</title> |
belaran@964 | 136 |
belaran@964 | 137 <para>Le plus célèbre des anciens outils de gestion de source est \textit{SCCS |
belaran@964 | 138 (Source Code Control System)}, que Marc Rochkind conçu dans les laboratoires de |
belaran@964 | 139 recherche de Bell (\textit{Bell Labs}), dans le début des années 70. |
belaran@964 | 140 \textit{SCCS} ne fonctionnait que sur des fichiers individuels, et obligeait chaque |
belaran@964 | 141 personne travaillant sur le projet d'avoir un accès à un répertoire de |
belaran@964 | 142 travail commun, sur le même système. Seulement une seule personne pouvait |
belaran@964 | 143 modifier un fichier au même moment, ce fonctionnement était assuré par |
belaran@964 | 144 l'utilisation de verrou (<quote>lock</quote>). Il était courant que des personnes |
belaran@964 | 145 verrouillent des fichiers, et plus tard, oublient de le déverrouiller; |
belaran@964 | 146 empêchant n'importe qui d'autre de travailler sur ces fichiers sans l'aide de |
belaran@964 | 147 l'administrateur... |
belaran@964 | 148 </para> |
belaran@964 | 149 |
belaran@964 | 150 <para>Walter Tichy a développé une alternative libre à \textit{SCCS} au début des |
belaran@964 | 151 années 80, qu'il nomma \textit{RSC (Revison Control System)}. Comme |
belaran@964 | 152 \textit{SCCS}, \textit{RCS} demandait aux développeurs de travailler sur le même |
belaran@964 | 153 répertoire partagé, et de verrouiller les |
belaran@964 | 154 fichiers pour se prémunir de tout conflit issu de modifications concurrentes. |
belaran@964 | 155 </para> |
belaran@964 | 156 |
belaran@964 | 157 <para>Un peu plus tard dans les années 1980, Dick Grune utilisa \textit{RCS} comme |
belaran@964 | 158 une brique de base pour un ensemble de scripts \textit{shell} qu'il intitula |
belaran@964 | 159 cmt, avant de la renommer en \textit{CVS (Concurrent Versions System)}. La |
belaran@964 | 160 grande innovation de CVS était que les développeurs pouvaient travailler |
belaran@964 | 161 simultanément et indépendamment dans leur propre espace de travail. Ces espaces |
belaran@964 | 162 de travail privés assuraient que les développeurs ne se marchent pas |
belaran@964 | 163 mutuellement sur les pieds, comme c'était souvent le cas avec RCS et SCCS. |
belaran@964 | 164 Chaque développeur disposait donc de sa copie de tous les fichiers du projet, |
belaran@964 | 165 et ils pouvaient donc librement les modifier. Ils devaient néanmoins effectuer |
belaran@964 | 166 la <quote>fusion</quote> (\textit{<quote>merge</quote>}) de leurs fichiers, avant d'effectuer le |
belaran@964 | 167 <quote>commit</quote> de leur modifications sur le dépôt central. |
belaran@964 | 168 </para> |
belaran@964 | 169 |
belaran@964 | 170 <para>Brian Berliner reprit les scripts de Grune's et les réécrit en C, qu'il publia |
belaran@964 | 171 en 1989. Depuis, ce code a été modifié jusqu'à devenir la version moderne de |
belaran@964 | 172 CVS. CVS a acquis ainsi la capacité de fonctionner en réseau, transformant son |
belaran@964 | 173 architecture en client/serveur. L'architecture de CVS est centralisée, seul le |
belaran@964 | 174 serveur a une copie de l'historique du projet. L'espace de travail client ne |
belaran@964 | 175 contient qu'une copie de la dernière version du projet, et quelques métadonnées |
belaran@964 | 176 pour indiquer où le serveur se trouve. CVS a été un grand succès, aujourd'hui |
belaran@964 | 177 il est probablement l'outil de gestion de contrôle le plus utilisé au monde. |
belaran@964 | 178 </para> |
belaran@964 | 179 |
belaran@964 | 180 <para>Au début des années 1990, Sun Microsystmes développa un premier outil de |
belaran@964 | 181 gestion de source distribué, nommé TeamWare. Un espace de travail TeamWare |
belaran@964 | 182 contient une copie complète de l'historique du projet. TeamWare n'a pas de |
belaran@964 | 183 notion de dépôt central. (CVS utilisait RCS pour le stockage de l'historique, |
belaran@964 | 184 TeamWare utilisait SCCS). |
belaran@964 | 185 </para> |
belaran@964 | 186 |
belaran@964 | 187 <para>Alors que les années 1990 avançaient, les utilisateurs ont pris conscience d'un |
belaran@964 | 188 certain nombre de problèmes avec CVS. Il enregistrait simultanément des |
belaran@964 | 189 modifications sur différents fichiers individuellement, au lieu de les |
belaran@964 | 190 regrouper dans une seule opération cohérente et atomique. Il ne gère pas bien |
belaran@964 | 191 sa hiérarchie de fichier, il est donc assez aisé de créer le chaos en renommant |
belaran@964 | 192 les fichiers et les répertoires. Pire encore, son code source est difficile à |
belaran@964 | 193 lire et à maintenir, ce qui agrandit largement le <quote>niveau de souffrance</quote> |
belaran@964 | 194 associé à la réparation de ces problèmes d'architecture de manière prohibitive. |
belaran@964 | 195 </para> |
belaran@964 | 196 |
belaran@964 | 197 <para>En 2001, Jim Blandy et Karl Fogel, deux développeurs qui avaient travaillé sur |
belaran@964 | 198 CVS, initièrent un projet pour le remplacer par un outil qui aurait une |
belaran@964 | 199 meilleure architecture et un code plus propre. Le résultat, Subversion, ne |
belaran@964 | 200 quitte pas le modèle centralisé et client/server de CVS, mais ajoute les |
belaran@964 | 201 opérations de <quote>commit</quote> atomique sur de multiples fichiers, une meilleure |
belaran@964 | 202 gestion des espaces de noms, et d'autres fonctionnalités qui en font un |
belaran@964 | 203 meilleur outil que CVS. Depuis sa première publication, il est rapidement |
belaran@964 | 204 devenu très populaire. |
belaran@964 | 205 </para> |
belaran@964 | 206 |
belaran@964 | 207 <para>Plus ou moins simultanément, Graydon Hoare a commencé sur l'ambitieux |
belaran@964 | 208 système de gestion distribué Monotone. Bien que Monotone corrige plusieurs |
belaran@964 | 209 défauts de CVS's tout en offrant une architecture <quote>peer-to-peer</quote>, il va aussi |
belaran@964 | 210 plus loin que la plupart des outils de révision de manière assez innovante. Il |
belaran@964 | 211 utilise des <quote>hash</quote> cryptographiques comme identifiants, et il a une notion |
belaran@964 | 212 complète de <quote>confiance</quote> du code issu des différentes sources. |
belaran@964 | 213 </para> |
belaran@964 | 214 |
belaran@964 | 215 <para>Mercurial est né en 2005. Bien que très influencé par Monotone, Mercurial se |
belaran@964 | 216 concentre sur la facilité d'utilisation, les performances et la capacité à |
belaran@964 | 217 monter en charge pour de très gros projets. |
belaran@964 | 218 </para> |
belaran@964 | 219 |
belaran@964 | 220 </sect1> |
belaran@964 | 221 <sect1> |
belaran@964 | 222 <title>Tendances de la gestion de source</title> |
belaran@964 | 223 |
belaran@964 | 224 <para>Il y a eu une tendance évidente dans le développement et l'utilisation d'outils |
belaran@964 | 225 de gestion de source depuis les quatre dernières décades, au fur et à mesure |
belaran@964 | 226 que les utilisateurs se sont habitués à leur outils et se sont sentis contraints |
belaran@964 | 227 par leurs limitations. |
belaran@964 | 228 </para> |
belaran@964 | 229 |
belaran@964 | 230 <para>La première génération commença simplement par gérer un fichier unique sur un |
belaran@964 | 231 ordinateur individuel. Cependant, même si ces outils présentaient une grande |
belaran@964 | 232 avancée par rapport à la gestion manuelle des versions, leur modèle de |
belaran@964 | 233 verrouillage et leur utilisation limitée à un seul ordinateur rendaient leur |
belaran@964 | 234 utilisation possible uniquement dans une très petite équipe. |
belaran@964 | 235 </para> |
belaran@964 | 236 |
belaran@964 | 237 <para>La seconde génération a assoupli ces contraintes en adoptant une architecture |
belaran@964 | 238 réseau et centralisée, permettant de gérer plusieurs projets entiers en même |
belaran@964 | 239 temps. Alors que les projets grandirent en taille, ils rencontrèrent de nouveaux |
belaran@964 | 240 problèmes. Avec les clients discutant régulièrement avec le serveurs, la montée |
belaran@964 | 241 en charge devint un réel problème sur les gros projets. Une connexion réseau |
belaran@964 | 242 peu fiable pouvait complètement empêcher les utilisateurs distants de dialoguer |
belaran@964 | 243 avec le serveur. Alors que les projets \textit{Open Source} commencèrent à |
belaran@964 | 244 mettre en place des accès en lecture seule disponible anonymement, les |
belaran@964 | 245 utilisateurs sans les privilèges de <quote>commit</quote> réalisèrent qu'ils ne pouvaient |
belaran@964 | 246 pas utiliser les outils pour collaborer naturellement avec le projet, comme ils |
belaran@964 | 247 ne pouvaient pas non plus enregistrer leurs modifications. |
belaran@964 | 248 </para> |
belaran@964 | 249 |
belaran@964 | 250 <para>La génération actuelle des outils de gestion de source est <quote>peer-to-peer</quote> par |
belaran@964 | 251 nature. Tout ces systèmes ont abandonné la dépendance à un serveur central, et |
belaran@964 | 252 ont permis à leur utilisateur de distribuer les données de leur gestion de |
belaran@964 | 253 source à qui en a besoin. La collaboration à travers Internet a transformé la |
belaran@964 | 254 contrainte technologique en une simple question de choix et de consencus. Les |
belaran@964 | 255 outils modernes peuvent maintenant fonctionner en mode déconnecté sans limite et |
belaran@964 | 256 de manière autonome, la connexion au réseau n'étant nécessaire que pour |
belaran@964 | 257 synchroniser les modifications avec les autres dépôts. |
belaran@964 | 258 </para> |
belaran@964 | 259 |
belaran@964 | 260 </sect1> |
belaran@964 | 261 <sect1> |
belaran@964 | 262 <title>Quelques avantages des gestionnaires de source distribués</title> |
belaran@964 | 263 |
belaran@964 | 264 <para>Même si les gestionnaire de source distribués sont depuis plusieurs années |
belaran@964 | 265 assez robustes et aussi utilisables que leurs prédécesseurs, les utilisateurs |
belaran@964 | 266 d'autres outils n'y ont pas encore été sensibilisés. Les gestionnaires |
belaran@964 | 267 de source distribués se distinguent particulièrement de leurs équivalents |
belaran@964 | 268 centralisés de nombreuses manières. |
belaran@964 | 269 </para> |
belaran@964 | 270 |
belaran@964 | 271 <para>Pour un développeur individuel, ils restent beaucoup plus rapides que les |
belaran@964 | 272 outils centralisés. Cela pour une raison simple : un outil centralisé doit |
belaran@964 | 273 toujours dialoguer à travers le réseau pour la plupart des opérations, car |
belaran@964 | 274 presque toutes les métadonnées sont stockées sur la seule copie du serveur |
belaran@964 | 275 central. Un outil distribué stocke toute ses métadonnées localement. À tâche |
belaran@964 | 276 égale, effectuer un échange avec le réseau ajoute un délai aux outils |
belaran@964 | 277 centralisés. Ne sous-estimez pas la valeur d'un outil rapide : vous allez |
belaran@964 | 278 passer beaucoup de temps à interagir avec un logiciel de gestion de source. |
belaran@964 | 279 </para> |
belaran@964 | 280 |
belaran@964 | 281 <para>Les outils distribués sont complètement indépendants des aléas de votre serveur, |
belaran@964 | 282 d'autant plus qu'ils répliquent les métadonnées à beaucoup d'endroits. Si |
belaran@964 | 283 votre serveur central prend feu, vous avez intérêt à ce que les médias de |
belaran@964 | 284 sauvegardes soient fiables, et que votre dernier <quote>backup</quote> soit récent et |
belaran@964 | 285 fonctionne sans problème. Avec un outil distribué, vous avez autant de |
belaran@964 | 286 <quote>backup</quote> que de contributeurs. |
belaran@964 | 287 </para> |
belaran@964 | 288 |
belaran@964 | 289 <para>En outre, la fiabilité de votre réseau affectera beaucoup moins les |
belaran@964 | 290 outils distribués. Vous ne pouvez même pas utiliser un outil centralisé |
belaran@964 | 291 sans connexion réseau, à l'exception de quelques commandes, très limitées. |
belaran@964 | 292 Avec un outil distribué, si votre connexion réseau tombe pendant que vous |
belaran@964 | 293 travaillez, vous pouvez ne même pas vous en rendre compte. La seule chose |
belaran@964 | 294 que vous ne serez pas capable de faire sera de communiquer avec des dépôts |
belaran@964 | 295 distants, opération somme toute assez rare en comparaison aux opérations |
belaran@964 | 296 locales. Si vous avez une équipe de collaborateurs très dispersée ceci peut |
belaran@964 | 297 être significatif. |
belaran@964 | 298 </para> |
belaran@964 | 299 |
belaran@964 | 300 <sect2> |
belaran@964 | 301 <title>Avantages pour les projets \textit{Open Source}</title> |
belaran@964 | 302 |
belaran@964 | 303 <para>Si vous prenez goût à un projet \textit{Open Source} et que vous |
belaran@964 | 304 décidez de commencer à toucher à son code, et que le projet utilise |
belaran@964 | 305 un gestionnaire de source distribué, vous êtes immédiatement un "pair" |
belaran@964 | 306 avec les personnes formant le <quote>cœur</quote> du projet. Si ils publient |
belaran@964 | 307 leurs dépôts, vous pouvez immédiatement copier leurs historiques de |
belaran@964 | 308 projet, faire des modifications, enregistrer votre travail en utilisant |
belaran@964 | 309 les même outils qu'eux. Par comparaison, avec un outil centralisé, vous |
belaran@964 | 310 devez utiliser un logiciel en mode <quote>lecture seule</quote> à moins que |
belaran@964 | 311 quelqu'un ne vous donne les privilèges de <quote>commit</quote> sur le serveur |
belaran@964 | 312 central. Avant ça, vous ne serez pas capable d'enregistrer vos |
belaran@964 | 313 modifications, et vos propres modifications risqueront de se |
belaran@964 | 314 corrompre chaque fois que vous essayerez de mettre à jour à votre |
belaran@964 | 315 espace de travail avec le serveur central. |
belaran@964 | 316 </para> |
belaran@964 | 317 |
belaran@964 | 318 <sect3> |
belaran@964 | 319 <title>Le non-problème du \textit{fork}</title> |
belaran@964 | 320 |
belaran@964 | 321 <para>Il a été souvent suggéré que les gestionnaires de source distribués |
belaran@964 | 322 posent un risque pour les projets \textit{Open Source} car ils |
belaran@964 | 323 facilitent grandement la création de <quote>fork</quote>\footnote{NdT:Création |
belaran@964 | 324 d'une |
belaran@964 | 325 <ulink url="version alternative du logiciel">version alternative du logiciel</ulink>{http://fr.wikipedia.org/wiki/Fork#Embranchement_d.27un_projet_informatique}.} |
belaran@964 | 326 Un <quote>fork</quote> apparait quand il y des divergences d'opinion ou d'attitude |
belaran@964 | 327 au sein d'un groupe de développeurs qui aboutissent à la décision de ne |
belaran@964 | 328 plus travailler ensemble. Chaque parti s'empare d'une copie plus ou moins |
belaran@964 | 329 complète du code source du projet et continue dans sa propre direction. |
belaran@964 | 330 </para> |
belaran@964 | 331 |
belaran@964 | 332 <para>Parfois ces différents partis décident de se réconcilier. Avec un |
belaran@964 | 333 serveur central, l'aspect <emphasis>technique</emphasis> de cette réconciliation |
belaran@964 | 334 est un processus douloureux, et essentiellement manuel. Vous devez |
belaran@964 | 335 décider quelle modification est <quote>la gagnante</quote>, et replacer, par un |
belaran@964 | 336 moyen ou un autre, les modifications de l'autre équipe dans l'arborescence |
belaran@964 | 337 du projet. Ceci implique généralement la perte d'une partie de l'historique |
belaran@964 | 338 d'un des partis, ou même des deux. |
belaran@964 | 339 </para> |
belaran@964 | 340 |
belaran@964 | 341 <para>Ce que les outils distribués permettent à ce sujet est probablement |
belaran@964 | 342 la <emphasis>meilleure</emphasis> façon de développer un projet. Chaque modification |
belaran@964 | 343 que vous effectuez est potentiellement un <quote>fork</quote>. La grande force de |
belaran@964 | 344 cette approche est que les gestionnaires de source distribués doivent être |
belaran@964 | 345 vraiment très efficaces pour <emphasis>fusionner</emphasis>\footnote{NdT:j'ai choisi de |
belaran@964 | 346 traduire ici \textit{merging} par <quote>fusionner</quote> pour des raisons de clarté} |
belaran@964 | 347 des <quote>forks</quote>, car les <quote>forks</quote>, dans ce contexte, arrivent tout le |
belaran@964 | 348 temps. |
belaran@964 | 349 </para> |
belaran@964 | 350 |
belaran@964 | 351 <para>Si chaque altération que n'importe qui effectue, à tout moment, est vue |
belaran@964 | 352 comme un <quote>fork</quote> à fusionner, alors ce que le monde de l'\textit{Open |
belaran@964 | 353 Source} voit comme un <quote>fork</quote> devient <emphasis>uniquement</emphasis> une problématique |
belaran@964 | 354 sociale. En fait, les outils de gestions de source distribués <emphasis>réduisent</emphasis> |
belaran@964 | 355 les chances de <quote>fork</quote>: |
belaran@964 | 356 </para> |
belaran@964 | 357 <itemizedlist> |
belaran@964 | 358 <listitem><para>Ils éliminent la distinction sociale qu'imposent les outils centralisés |
belaran@964 | 359 entre les membres du projets (ceux qui ont accès au <quote>commit</quote>) et ceux de |
belaran@964 | 360 l'extérieur (ce qui ne l'ont pas). \item Ils rendent plus facile la |
belaran@964 | 361 réconciliation après un <quote>fork</quote> social, car |
belaran@964 | 362 tout ce qu'elle implique est une simple fusion. |
belaran@964 | 363 </para> |
belaran@964 | 364 </listitem></itemizedlist> |
belaran@964 | 365 |
belaran@964 | 366 <para>Certaines personnes font de la résistance envers les gestionnaires de source |
belaran@964 | 367 distribués parce qu'ils veulent garder un contrôle ferme sur leur projet, et |
belaran@964 | 368 ils pensent que les outils centralisés leur fournissent ce contrôle. Néanmoins, |
belaran@964 | 369 si c'est votre cas, sachez que si vous publiez votre dépôt CVS ou Subversion |
belaran@964 | 370 de manière publique, il existe une quantité d'outils disponibles pour récupérer |
belaran@964 | 371 entièrement votre projet et son historique (quoique lentement) et le récréer |
belaran@964 | 372 ailleurs, sans votre contrôle. En fait, votre contrôle sur votre projet est |
belaran@964 | 373 illusoire, vous ne faites qu'interdire à vos collaborateurs de travailler |
belaran@964 | 374 de manière fluide, en disposant d'un miroir ou d'un <quote>fork</quote> de votre |
belaran@964 | 375 historique. |
belaran@964 | 376 %%%TODO: Fussy, those last sentences are not really well translated: |
belaran@964 | 377 %%%no problem for me (wilk) |
belaran@964 | 378 %However, if you're of this belief, and you publish your CVS or Subversion |
belaran@964 | 379 %repositories publically, there are plenty of tools available that can pull |
belaran@964 | 380 %out your entire project's history (albeit slowly) and recreate it somewhere |
belaran@964 | 381 %that you don't control. So while your control in this case is illusory, you are |
belaran@964 | 382 %forgoing the ability to fluidly collaborate with whatever people feel |
belaran@964 | 383 %compelled to mirror and fork your history. |
belaran@964 | 384 </para> |
belaran@964 | 385 |
belaran@964 | 386 </sect3> |
belaran@964 | 387 </sect2> |
belaran@964 | 388 <sect2> |
belaran@964 | 389 <title>Avantages pour les projets commerciaux</title> |
belaran@964 | 390 |
belaran@964 | 391 <para>Beaucoup de projets commerciaux sont réalisés par des équipes éparpillées |
belaran@964 | 392 à travers le globe. Les contributeurs qui sont loin du serveur central |
belaran@964 | 393 devront subir des commandes lentes et même parfois peu fiables. Les |
belaran@964 | 394 solutions propriétaires de gestion de source tentent de palier ce problème |
belaran@964 | 395 avec des réplications de sites distants qui sont à la fois coûteuses à mettre |
belaran@964 | 396 en place et lourdes à administrer. Un système distribué ne souffre pas |
belaran@964 | 397 de ce genre de problèmes. En outre, il est très aisé de mettre en place |
belaran@964 | 398 plusieurs serveurs de références, disons un par site, de manière à ce qu'il |
belaran@964 | 399 n'y ait pas de communication redondante entre les dépôts, sur une connexion |
belaran@964 | 400 longue distance souvent onéreuse. |
belaran@964 | 401 </para> |
belaran@964 | 402 |
belaran@964 | 403 <para>Les systèmes de gestion de source supportent généralement assez mal la |
belaran@964 | 404 montée en charge. Ce n'est pas rare pour un gestionnaire de source centralisé |
belaran@964 | 405 pourtant onéreux de s'effondrer sous la charge combinée d'une douzaine |
belaran@964 | 406 d'utilisateurs concurrents seulement. Une fois encore, la réponse à cette problématique |
belaran@964 | 407 est généralement encore la mise en place d'un ensemble complexe de serveurs |
belaran@964 | 408 synchronisés par un mécanisme de réplication. Dans le cas d'un gestionnaire |
belaran@964 | 409 de source distribué, la charge du serveur central &emdash; si vous avez un&emdash; est |
belaran@964 | 410 plusieurs fois inférieure (car toutes les données sont déjà répliquées ailleurs), |
belaran@964 | 411 un simple serveur, pas très cher, peut gérer les besoins d'une plus grande |
belaran@964 | 412 équipe, et la réplication pour balancer la charge devient le |
belaran@964 | 413 travail d'un simple script. |
belaran@964 | 414 </para> |
belaran@964 | 415 |
belaran@964 | 416 <para>Si vous avez des employés sur le terrain, en train de chercher à résoudre un souci sur |
belaran@964 | 417 le site d'un client, ils bénéficieront aussi d'un gestionnaire de source |
belaran@964 | 418 distribué. Cet outil leur permettra de générer des versions personnalisées, |
belaran@964 | 419 d'essayer différentes solutions, en les isolant aisément les unes des autres, |
belaran@964 | 420 et de rechercher efficacement à travers l'historique des sources, la cause |
belaran@964 | 421 des bugs ou des régressions, tout ceci sans avoir besoin de la moindre |
belaran@964 | 422 connexion au réseau de votre compagnie. |
belaran@964 | 423 </para> |
belaran@964 | 424 |
belaran@964 | 425 </sect2> |
belaran@964 | 426 </sect1> |
belaran@964 | 427 <sect1> |
belaran@964 | 428 <title>Pourquoi choisir Mercurial?</title> |
belaran@964 | 429 |
belaran@964 | 430 <para>Mercurial a plusieurs caractéristiques qui en font un choix particulièrement |
belaran@964 | 431 pertinent pour la gestion de source: |
belaran@964 | 432 </para> |
belaran@964 | 433 <itemizedlist> |
belaran@964 | 434 <listitem><para> \item Il est facile à apprendre et à utiliser ; |
belaran@964 | 435 \item Il est léger et performant ; |
belaran@964 | 436 \item Il monte facilement en charge ; |
belaran@964 | 437 \item Il est facile à personnaliser ; |
belaran@964 | 438 </para> |
belaran@964 | 439 </listitem></itemizedlist> |
belaran@964 | 440 |
belaran@964 | 441 <para>Si vous êtes déjà familier d'un outil de gestion de source, vous serez |
belaran@964 | 442 capable de l'utiliser en moins de 5 minutes. Sinon, ça ne sera pas beaucoup |
belaran@964 | 443 plus long\footnote{NdT: Pour appuyer le propos de l'auteur, je signale que |
belaran@964 | 444 j'utilise Mercurial comme outil d'initiation à la gestion de contrôle dans |
belaran@964 | 445 des travaux pratiques à l'ESME Sudria (<ulink url="http://www.esme.fr">http://www.esme.fr</ulink>) et que les |
belaran@964 | 446 élèves le prennent en main sans difficulté majeure malgré l'approche distribuée.}. |
belaran@964 | 447 Les commandes utilisées par Mercurial, comme ses fonctionnalités, sont |
belaran@964 | 448 généralement uniformes et cohérentes, et vous pouvez donc ainsi garder en tête |
belaran@964 | 449 simplement quelques règles générales, plutôt qu'un lot complexe d'exceptions. |
belaran@964 | 450 </para> |
belaran@964 | 451 |
belaran@964 | 452 <para>Sur un petit projet, vous pouvez commencer à travailler avec Mercurial en |
belaran@964 | 453 quelques instants. Ajouter des modifications ou des branches, transférer |
belaran@964 | 454 ces modifications (localement ou via le réseau), et les opérations |
belaran@964 | 455 d'historique ou de statut sont aussi très rapides. Mercurial reste hors de |
belaran@964 | 456 votre chemin grâce à sa simplicité d'utilisation et sa rapidité d'exécution. |
belaran@964 | 457 </para> |
belaran@964 | 458 |
belaran@964 | 459 <para>L'utilité de Mercurial ne se limite pas à de petits projets: il est |
belaran@964 | 460 aussi utilisé par des projets ayant des centaines ou même des milliers |
belaran@964 | 461 de contributeurs, avec plusieurs dizaines de milliers de fichiers, et des |
belaran@964 | 462 centaines de méga de code source. |
belaran@964 | 463 </para> |
belaran@964 | 464 |
belaran@964 | 465 <para>Voici une liste non exhaustive des projets complexes ou critiques utilisant |
belaran@964 | 466 Mercurial : |
belaran@964 | 467 %TODO |
belaran@964 | 468 % For both spanish and english version, add the following examples: |
belaran@964 | 469 </para> |
belaran@964 | 470 <itemizedlist> |
belaran@964 | 471 <listitem><para> \item <ulink url="Firefox">Firefox</ulink>{https://developer.mozilla.org/en/Mozilla_Source_Code_(Mercurial)} ; |
belaran@964 | 472 \item <ulink url="OpenSolaris">OpenSolaris</ulink>{http://opensolaris.org/os/community/tools/scm/hg_help/} ; |
belaran@964 | 473 \item <ulink url="OpenJDK">OpenJDK</ulink>{http://hg.openjdk.java.net/} (utilisant en outre l'extension |
belaran@964 | 474 <quote>forest</quote> pour gérer ses sous modules); |
belaran@964 | 475 </para> |
belaran@964 | 476 </listitem></itemizedlist> |
belaran@964 | 477 |
belaran@964 | 478 <para>Si les fonctionnalités cœur de Mercurial ne sont pas suffisantes pour vous, |
belaran@964 | 479 il est très aisé d'en construire d'autres. Mercurial est adapté à l'utilisation |
belaran@964 | 480 de scripts, et son implémentation interne en Python, propre et claire, |
belaran@964 | 481 rend encore plus facile l'ajout de fonctionnalités sous forme d'extensions. Il |
belaran@964 | 482 en existe déjà un certain nombre de très populaires et très utiles, |
belaran@964 | 483 dont le périmètre va de la recherche de bugs à l'amélioration des performances. |
belaran@964 | 484 </para> |
belaran@964 | 485 |
belaran@964 | 486 </sect1> |
belaran@964 | 487 <sect1> |
belaran@964 | 488 <title>Mercurial comparé aux autres outils</title> |
belaran@964 | 489 |
belaran@964 | 490 <para>Avant que vous n'alliez plus loin, comprenez bien que cette section |
belaran@964 | 491 reflète mes propres expériences, et elle est donc (j'ose le dire) |
belaran@964 | 492 peu objective. Néanmoins, j'ai utilisé les outils de gestion de source |
belaran@964 | 493 listés ci dessous, dans la plupart des cas, pendant plusieurs années. |
belaran@964 | 494 %% TODO: Fussy translation. |
belaran@964 | 495 </para> |
belaran@964 | 496 |
belaran@964 | 497 <sect2> |
belaran@964 | 498 <title>Subversion</title> |
belaran@964 | 499 |
belaran@964 | 500 <para>Subversion est un des outils de gestion de source les plus populaire, il fût |
belaran@964 | 501 développé pour remplacer CVS. Il a une architecture client/server centralisée. |
belaran@964 | 502 </para> |
belaran@964 | 503 |
belaran@964 | 504 <para>Subversion et Mercurial ont des noms de commandes très similaires pour |
belaran@964 | 505 les mêmes opérations, ainsi si vous êtes familier avec l'un, c'est facile |
belaran@964 | 506 d'apprendre l'autre. Ces deux outils sont portables sur les systèmes |
belaran@964 | 507 d'exploitation les plus populaires\footnote{NdT:Mercurial fonctionne sans problème |
belaran@964 | 508 sur OpenVMS à l'ESME Sudria <ulink url="http://www.esme.fr">http://www.esme.fr</ulink>, compte tenu que Subversion a été |
belaran@964 | 509 développé en C, je ne suis pas sûr que son portage aurait été aussi aisé.}. |
belaran@964 | 510 %TODO: Backport this statement in english and spanish |
belaran@964 | 511 </para> |
belaran@964 | 512 |
belaran@964 | 513 <para>Avant la version 1.5, Subversion n'offrait aucune forme de support pour les fusions. Lors |
belaran@964 | 514 de l'écriture de ce livre, ses capacités de fusion étaient nouvelles, et réputées pour être |
belaran@964 | 515 \href{http://svnbook.red-bean.com/nightly/en/svn.branchmerge.advanced.html#svn.branchmerge.advanced.finalword}{complexes |
belaran@964 | 516 et bugguées}. |
belaran@964 | 517 </para> |
belaran@964 | 518 |
belaran@964 | 519 <para>Mercurial dispose d'un avantage substantiel en terme de performance par rapport à |
belaran@964 | 520 Subversion sur la plupart des opérations que j'ai pu tester. J'ai mesuré |
belaran@964 | 521 une différence de performance allant de deux à six fois plus rapide avec |
belaran@964 | 522 le système de stockage de fichier local de Subversion 1.4.3 |
belaran@964 | 523 (<emphasis>ra_local</emphasis>), qui est la méthode d'accès la plus rapide disponible. Dans |
belaran@964 | 524 un déploiement plus réaliste, impliquant un stockage réseau, Subversion |
belaran@964 | 525 serait encore plus désavantagé. Parce que la plupart des commandes Subversion |
belaran@964 | 526 doivent communiquer avec le serveur et que Subversion n'a pas de mécanisme |
belaran@964 | 527 de réplication, la capacité du serveur et la bande passante sont devenues des |
belaran@964 | 528 goulots d'étranglement pour les projets de taille moyenne ou grande. |
belaran@964 | 529 </para> |
belaran@964 | 530 |
belaran@964 | 531 <para>En outre, Subversion implique une surcharge substantielle dans le stockage local |
belaran@964 | 532 de certaines données, pour éviter des transactions avec le serveur, pour |
belaran@964 | 533 certaines opérations communes, telles que la recherche des fichiers modifiés |
belaran@964 | 534 (<literal>status</literal>) et l'affichage des modifications par rapport à la révision |
belaran@964 | 535 courante (<literal>diff</literal>). En conséquence, un répertoire de travail Subversion |
belaran@964 | 536 a souvent la même taille, ou est plus grand, qu'un dépôt Mercurial et son |
belaran@964 | 537 espace de travail, et ceci bien que le dépôt Mercurial contienne l'intégralité |
belaran@964 | 538 de l'historique. |
belaran@964 | 539 </para> |
belaran@964 | 540 |
belaran@964 | 541 <para>Subversion est largement supporté par les outils tierces. Mercurial est |
belaran@964 | 542 actuellement encore en retrait de ce point de vue. L'écart se réduit, néanmoins, |
belaran@964 | 543 et en effet certains des outils graphiques sont maintenant supérieurs à leurs |
belaran@964 | 544 équivalents Subversion. Comme Mercurial, Subversion dispose d'un excellent |
belaran@964 | 545 manuel utilisateur. |
belaran@964 | 546 </para> |
belaran@964 | 547 |
belaran@964 | 548 <para>Parce que Subversion ne stocke pas l'historique chez ses clients, il est |
belaran@964 | 549 parfaitement adapté à la gestion de projets qui doivent suivre un ensemble |
belaran@964 | 550 de larges fichiers binaires et opaques. Si vous suivez une cinquantaine de |
belaran@964 | 551 versions d'un fichier incompressible de 10MB, l'occupation disque coté client |
belaran@964 | 552 d'un projet sous Subversion restera à peu près constante. A l'inverse, |
belaran@964 | 553 l'occupation disque du même projet sous n'importe lequel des gestionnaires |
belaran@964 | 554 de source distribués grandira rapidement, proportionnellement aux nombres |
belaran@964 | 555 de versions, car les différences entre chaque révisions seront très grandes. |
belaran@964 | 556 </para> |
belaran@964 | 557 |
belaran@964 | 558 <para>En outre, c'est souvent difficile ou, généralement, impossible de fusionner |
belaran@964 | 559 des différences dans un fichier binaire. La capacité de Subversion de |
belaran@964 | 560 verrouiller des fichiers, pour permettre à l'utilisateur d'être le seul |
belaran@964 | 561 à le mettre à jour (<quote>commit</quote>) temporairement, est un avantage significatif |
belaran@964 | 562 dans un projet doté de beaucoup de fichiers binaires. |
belaran@964 | 563 </para> |
belaran@964 | 564 |
belaran@964 | 565 <para>Mercurial peut importer l'historique depuis un dépôt Subversion. Il peut |
belaran@964 | 566 aussi exporter l'ensemble des révisions d'un projet vers un dépôt Subversion. |
belaran@964 | 567 Ceci rend très facile de <quote>prendre la température</quote> et d'utiliser Mercurial et Subversion |
belaran@964 | 568 en parallèle, avant de décider de migrer vers Mercurial. La conversion de |
belaran@964 | 569 l'historique est incrémentale, donc vous pouvez effectuer une conversion |
belaran@964 | 570 initiale, puis de petites additions par la suite pour ajouter les nouvelles |
belaran@964 | 571 modifications. |
belaran@964 | 572 </para> |
belaran@964 | 573 |
belaran@964 | 574 </sect2> |
belaran@964 | 575 <sect2> |
belaran@964 | 576 <title>Git</title> |
belaran@964 | 577 |
belaran@964 | 578 <para>Git est un outil de gestion de source distribué qui fût développé pour gérer |
belaran@964 | 579 le code source de noyau de Linux. Comme Mercurial, sa conception initiale a |
belaran@964 | 580 été inspirée par Monotone. |
belaran@964 | 581 </para> |
belaran@964 | 582 |
belaran@964 | 583 <para>Git dispose d'un ensemble conséquent de commandes, avec plus de 139 commandes |
belaran@964 | 584 individuelles pour la version 1.5.0. Il a aussi la réputation d'être difficile |
belaran@964 | 585 à apprendre. Comparé à Git, le point fort de Mercurial est clairement sa |
belaran@964 | 586 simplicité. |
belaran@964 | 587 </para> |
belaran@964 | 588 |
belaran@964 | 589 <para>En terme de performance, Git est extrêmement rapide. Dans la plupart des |
belaran@964 | 590 cas, il est plus rapide que Mercurial, tout du moins sur Linux, alors que |
belaran@964 | 591 Mercurial peut être plus performant sur d'autres opérations. Néanmoins, sur |
belaran@964 | 592 Windows, les performances et le niveau de support général fourni par Git, |
belaran@964 | 593 au moment de l'écriture de cet ouvrage, est bien derrière celui de Mercurial. |
belaran@964 | 594 </para> |
belaran@964 | 595 |
belaran@964 | 596 <para>Alors que le dépôt Mercurial ne demande aucune maintenance, un dépôt Git |
belaran@964 | 597 exige d'exécuter manuellement et régulièrement la commande <quote>repacks</quote> sur |
belaran@964 | 598 ces métadonnées. Sans ceci, les performances de git se dégradent et la |
belaran@964 | 599 consommation de l'espace disque augmente rapidement. Un serveur qui contient |
belaran@964 | 600 plusieurs dépôts Git qui ne sont pas régulièrement et fréquemment <quote>repacked</quote> |
belaran@964 | 601 deviendra un vrai problème lors des <quote>backups</quote> du disque, et il y eu des |
belaran@964 | 602 cas, où un <quote>backup</quote> journalier pouvait durer plus de 24 heures. Un dépôt |
belaran@964 | 603 fraichement <quote>repacked</quote> sera légèrement plus petit qu'un dépôt Mercurial, |
belaran@964 | 604 mais un dépôt non <quote>repacked</quote> est beaucoup plus grand. |
belaran@964 | 605 </para> |
belaran@964 | 606 |
belaran@964 | 607 <para>Le cœur de Git est écrit en C. La plupart des commandes Git sont implémentées |
belaran@964 | 608 sous forme de scripts Shell ou Perl, et la qualité de ces scripts varie |
belaran@964 | 609 grandement. J'ai plusieurs fois constaté que certains de ces scripts étaient |
belaran@964 | 610 chargés en mémoire aveuglément et que la présence d'erreurs pouvait s'avérer |
belaran@964 | 611 fatal. |
belaran@964 | 612 </para> |
belaran@964 | 613 |
belaran@964 | 614 <para>Mercurial peut importer l'historique d'un dépôt Git. |
belaran@964 | 615 </para> |
belaran@964 | 616 |
belaran@964 | 617 </sect2> |
belaran@964 | 618 <sect2> |
belaran@964 | 619 <title>CVS</title> |
belaran@964 | 620 |
belaran@964 | 621 <para>CVS est probablement l'outil de gestion de source le plus utilisé aujourd'hui |
belaran@964 | 622 dans le monde. À cause de son manque de clarté interne, il n'est plus |
belaran@964 | 623 maintenu depuis plusieurs années. |
belaran@964 | 624 </para> |
belaran@964 | 625 |
belaran@964 | 626 <para>Il a une architecture client/serveur centralisée. Il ne regroupe pas les |
belaran@964 | 627 modifications de fichiers dans une opération de <quote>commit</quote> atomique, ce |
belaran@964 | 628 qui permet à ses utilisateurs de <quote>casser le \textit{build}</quote> assez |
belaran@964 | 629 facilement : une personne peut effectuer une opération de <quote>commit</quote> |
belaran@964 | 630 sans problème puis être bloquée par besoin de fusion, avec comme conséquence |
belaran@964 | 631 néfaste, que les autres utilisateurs ne récupèreront qu'une partie de ses |
belaran@964 | 632 modifications. Ce problème affecte aussi la manière de travailler avec |
belaran@964 | 633 l'historique du projet. Si vous voulez voir toutes les modifications d'une |
belaran@964 | 634 personne du projet, vous devrez injecter manuellement les descriptions et les |
belaran@964 | 635 \textit{timestamps} des modifications de chacun des fichiers impliqués (si |
belaran@964 | 636 vous savez au moins quels sont ces fichiers). |
belaran@964 | 637 </para> |
belaran@964 | 638 |
belaran@964 | 639 <para>CVS a une notion étrange des \textit{tags} et des branches que je n'essayerai |
belaran@964 | 640 même pas de décrire ici. Il ne supporte pas bien les opérations de renommage d'un |
belaran@964 | 641 fichier ou d'un répertoire, ce qui facilite la corruption de son dépôt. Il n'a |
belaran@964 | 642 presque pas pour ainsi dire de contrôle de cohérence interne, il est donc |
belaran@964 | 643 pratiquement impossible de dire si un dépôt est corrompu ni à quel point. Je |
belaran@964 | 644 ne recommanderai pas CVS pour un projet existant ou nouveau. |
belaran@964 | 645 </para> |
belaran@964 | 646 |
belaran@964 | 647 <para>Mercurial peut importer l'historique d'un projet CVS. Néanmoins, il y a |
belaran@964 | 648 quelques principes à respecter; ce qui est vrai aussi pour les autres |
belaran@964 | 649 outils d'import de projet CVS. À cause de l'absence de <quote>commit</quote> atomique |
belaran@964 | 650 et gestion de version de l'arborescence, il n'est pas possible de reconstruire |
belaran@964 | 651 de manière précise l'ensemble de l'historique. Un travail de <quote>devinette</quote> |
belaran@964 | 652 est donc nécessaire, et les fichiers renommés ne sont pas détectés. Parce |
belaran@964 | 653 qu'une bonne part de l'administration d'un dépôt CVS est effectuée manuellement, |
belaran@964 | 654 et est donc, sujette à erreur, il est courant que les imports CVS rencontrent |
belaran@964 | 655 de nombreux problèmes avec les dépôt corrompus (des \textit{timestamps} |
belaran@964 | 656 de révision complètement buggés et des fichiers verrouillés depuis des années |
belaran@964 | 657 sont deux des problèmes les moins intéressants dont je me souvienne). |
belaran@964 | 658 </para> |
belaran@964 | 659 |
belaran@964 | 660 <para>Mercurial peut importer l'historique depuis un dépôt CVS. |
belaran@964 | 661 </para> |
belaran@964 | 662 |
belaran@964 | 663 </sect2> |
belaran@964 | 664 <sect2> |
belaran@964 | 665 <title>Outils propriétaires</title> |
belaran@964 | 666 |
belaran@964 | 667 <para>Perforce a une architecture client/serveur centralisée, sans aucun |
belaran@964 | 668 mécanisme de mise en cache de données coté client. Contrairement à la plupart |
belaran@964 | 669 des outils modernes de gestion de source, Perforce exige de ses |
belaran@964 | 670 utilisateurs d'exécuter une commande pour informer le serveur |
belaran@964 | 671 central de tout fichier qu'ils souhaitent modifier. |
belaran@964 | 672 </para> |
belaran@964 | 673 |
belaran@964 | 674 <para>Les performances de Perforce sont plutôt bonnes pour des petites |
belaran@964 | 675 équipes, mais elles s'effondrent rapidement lorsque le nombre |
belaran@964 | 676 d'utilisateurs augmente au delà de la douzaine. Des installations |
belaran@964 | 677 de Perforce assez larges nécessitent le déploiement de proxies pour |
belaran@964 | 678 supporter la montée en charge associée. |
belaran@964 | 679 </para> |
belaran@964 | 680 |
belaran@964 | 681 </sect2> |
belaran@964 | 682 <sect2> |
belaran@964 | 683 <title>Choisir un outil de gestion de source</title> |
belaran@964 | 684 |
belaran@964 | 685 <para>A l'exception de CVS, tous les outils listés ci-dessus ont des |
belaran@964 | 686 forces qui leur sont propres et qui correspondent à certaines |
belaran@964 | 687 formes de projet. Il n'y a pas un seul meilleur outil de gestion |
belaran@964 | 688 de source qui correspondrait le mieux à toutes les situations. |
belaran@964 | 689 </para> |
belaran@964 | 690 |
belaran@964 | 691 <para>Par exemple, Subversion est un très bon choix lorsqu'on travaille |
belaran@964 | 692 avec beaucoup de fichiers binaires, qui évoluent régulièrement, grâce |
belaran@964 | 693 à sa nature centralisée et sa capacité à verrouiller des fichiers. |
belaran@964 | 694 </para> |
belaran@964 | 695 |
belaran@964 | 696 <para>Personnellement, je préfère Mercurial pour sa simplicité, ses |
belaran@964 | 697 performances et sa bonne capacité de fusion, et il m'a très bien rendu service |
belaran@964 | 698 de plusieurs années maintenant. |
belaran@964 | 699 </para> |
belaran@964 | 700 |
belaran@964 | 701 </sect2> |
belaran@964 | 702 </sect1> |
belaran@964 | 703 <sect1> |
belaran@964 | 704 <title>Migrer depuis un outil à Mercurial</title> |
belaran@964 | 705 |
belaran@964 | 706 <para>Mercurial est livré avec une extension nommée <literal role="hg-ext">convert</literal>, qui |
belaran@964 | 707 peut de manière incrémentale importer des révisions depuis différents |
belaran@964 | 708 autres outils de gestion de source. Par <quote>incrémental</quote>, j'entends que |
belaran@964 | 709 vous pouvez convertir l'historique entier du projet en une seule fois, |
belaran@964 | 710 puis relancer l'outil d'import plus tard pour obtenir les modifications |
belaran@964 | 711 effectuées depuis votre import initial. |
belaran@964 | 712 </para> |
belaran@964 | 713 |
belaran@964 | 714 <para>Les outils de gestion de source supportés par <literal role="hg-ext">convert</literal> sont : |
belaran@964 | 715 </para> |
belaran@964 | 716 <itemizedlist> |
belaran@964 | 717 <listitem><para> \item Subversion |
belaran@964 | 718 \item CVS |
belaran@964 | 719 \item Git |
belaran@964 | 720 \item Darcs |
belaran@964 | 721 </para> |
belaran@964 | 722 </listitem></itemizedlist> |
belaran@964 | 723 |
belaran@964 | 724 <para>En outre, <literal role="hg-ext">convert</literal> peut exporter les modifications depuis Mercurial |
belaran@964 | 725 vers Subversion. Ceci rend possible d'essayer Subversion en parallèle |
belaran@964 | 726 avant de choisir une solution définitive, sans aucun risque de perte de |
belaran@964 | 727 données. |
belaran@964 | 728 </para> |
belaran@964 | 729 |
belaran@964 | 730 <para>La commande <command role="hg-ext-conver">convert</command> est très simple à utiliser. Simplement, |
belaran@964 | 731 indiquez le chemin ou l'URL du dépôt de source, en lui indiquant éventuellement |
belaran@964 | 732 le nom du chemin de destination, et la conversion se met en route. Après cet |
belaran@964 | 733 import initial, il suffit de relancer la commande encore une fois pour |
belaran@964 | 734 importer les modifications effectuées depuis. |
belaran@964 | 735 </para> |
belaran@964 | 736 |
belaran@964 | 737 </sect1> |
belaran@964 | 738 </chapter> |
belaran@964 | 739 |
belaran@964 | 740 <!-- |
belaran@964 | 741 local variables: |
belaran@964 | 742 sgml-parent-document: ("00book.xml" "book" "chapter") |
belaran@964 | 743 end: |
belaran@964 | 744 --> |