hgbook

view fr/intro.tex @ 925:b7e8a6a93863

Correcting some typos and missing words
author Romain PELISSE <romain.pelisse@atosorigin.com>
date Sun Feb 08 14:13:19 2009 +0100 (2009-02-08)
parents 0d08ac613527
children 730d912ef843
line source
1 \chapter{Introduction}
2 \label{chap:intro}
4 \section{A propros de la gestion source}
6 La gestion de source est un processus permettant de gérer différentes
7 version de la même information. Dans sa forme la plus simple, c'est
8 quelquechose que tout le monde fait manuellement : quand vous modifiez
9 un fichier, vous le sauvegarder sous un nouveau nom contenant un numéro,
10 à chaque fois plus grand la précédente version.
12 Ce genre de gestion de version manuel est cependant sujette facilement
13 à des erreurs, ainsi, depuis longtemps, des logiciels existent pour
14 adresser cette problématique. Les premiers outils de gestion de source
15 étaient destinés à aider un seul utilisateur, à automatiser la gestion
16 des versions d'un seulf fichier. Dans les dernières décades, cette cilble
17 a largement était agrandie, ils gèrent désormais de multiple fichiers, et
18 aident un grand nombre de personnes à travailler ensemble. Le outils les
19 plus modernes n'ont aucune difficultés à gérer plusieurs milliers de
20 personnes travaillant ensemble sur des projets regroupant plusieurs
21 centaines de milliers de fichiers.
23 \subsection{Pourquoi utiliser un gestionnaire de source ?}
25 Il y a de nombreuse raisons pour que vous ou votre équipe souhaitiez
26 utiliser un outil automatisant la gestion de version pour votre projet.
27 \begin{itemize}
28 \item L'outil se chargera de suivre l'évolution de votre projet, sans
29 que vous ayez à le faire. Pour chaque modification, vous aurez à votre
30 disposition un journal indiquant \emph{qui} a faient quoi, \emph{pourquoi}
31 ils l'ont fait, \emph{quand} ils l'ont fait, et \emph{ce} qu'ils ont
32 modifiés.
33 \item Quand vous travaillez avec d'autres personnes, les logiciels de
34 gestion de source facilite le travail collaboratif. Par exemple, quand
35 plusieurs personnes font, plus ou moins simultannéement, des modifications
36 incompatibles, le logiciel vous aidera à identifier et résoudre les conflits.
37 \item L'outil vous aidera à réparer vos erreurs. Si vous effectuez un changement
38 qui se révèlera être une erreur, vous pourrez revenir fiablement à une version
39 antérieur d'une fichier ou même d'un ensemble de fichier. En fait, un outil de
40 gestion de source \emph{vraiment} efficace vous permettra d'identifier à quel
41 moment le problème est apparu (voir la section~\ref{sec:undo:bisect} pour plus
42 de détails).
43 \item L'outil vous permettra aussi de travailler sur plusieurs versions différentes
44 de votre projet et à gérer l'écart entre chaque.
45 \end{itemize}
46 La plupart de ces raisons ont autant d'importances---du moins en théorie--- que
47 vous travailliez sur un projet pour vous, ou avec une centaine d'autres
48 personnes.
50 Une question fondamental à propos des outils de gestion de source, qu'il s'agisse
51 du projet d'une personne ou d'une grande équipe, est quelles sont ses
52 \emph{avantages} par rapport à ses \emph{coût}. Un outil qui est difficile à
53 utiliser ou à comprendre exigera un effort d'adoption.
55 Un projet de cinq milles personnnes s'effondrera très certainement de lui même
56 sans aucun processus et outil de gestion de source. Dans ce cas, le coût
57 d'utilisation d'un logiciel de gestion de source est dérisoire, puisque
58 \emph{sans}, l'échec est presque garanti.
60 D'un autre coté, un ``rapide hack'' d'une personnne peut sembler un contexte
61 bien pauvre pour utiliser un outil de gestion de source, car, bien évidement
62 le coût d'utilisation dépasse le coût total du projet. N'est ce pas ?
64 Mercurial supporte ces \emph{deux} échelles de travail. Vous pouvez apprendre
65 les bases en juste quelques minutes, et, grâce à sa performance, vous pouvez
66 l'utiliser avec facilité sur le plus petit des projets. Cette simplicité
67 signifie que vous n'avez pas de concepts obscures ou de séquence de commandes
68 défiant l'imagination, complètement décorrelé de \emph{ce que vous êtes
69 vraiment entrain de faire}. En même temps, ces mêmes performances et sa
70 nature ``peer-to-peer'' vous permet d'augmenter, sans difficulté, son
71 utilisation à de très grand projet.
73 Aucun outil de gestion de source ne peut sauver un projet mal mené, mais un
74 bon outil peut faire une grande différence dans la fluidité avec lequel
75 vous pourrez travailler avec.
77 \subsection{Les multiples noms de la gestion de source}
79 La gestion de source est un domaine divers, tellement qu'il n'existe pas
80 une seul nom ou acronyme pour le désigner. Voilà quelqu'uns des noms ou
81 acronymes que vous rencontrerez le plus souvent:
82 \begin{itemize}
83 \item \textit{Revision control (RCS)} ;
84 \item Software configuration management (SCM), ou \textit{configuration management} ;
85 \item \textit{Source code management} ;
86 \item \textit{Source code control}, ou \textit{source control} ;
87 \item \textit{Version control (VCS)}.
88 \end{itemize}
90 \notebox {
91 Note du traducteur : J'ai conservé la liste des noms en anglais pour des raisons de commodité (ils sont plus ``googelable''). J'ai choisi de conserver le terme ``gestion de sources'' comme traduction unique dans l'ensemble du document.
93 En outre, j'ai opté pour conserver l'ensemble des opérations de Mercurial (commit, push, pull,...) en anglais, là aussi pour faciliter la lecture d'autres documents en anglais, et
94 aussi son utilisation.
95 }
97 Certains personnes prétendent que ces termes ont en fait des sens
98 différents mais en pratique ils se recouvrent tellement qu'il n'y a pas
99 réellement de manière pertinente de les distinguer.
101 \section{Une courte histoire de la gestion de source}
103 Le plus célèbre des anciens outils de gestion de source est \textit{SCCS (Source
104 Code Control System)}, que Marc Rochkind conçu dans les laboratoire de recherche de Bell
105 (\textit{Bell Labs}), dans le début des années 70. \textit{SCCS} ne fonctionner que sur des fichiers individuels, et demandait à personne travaillant sur le projet d'avoir un accès à un répertoire de travail commun, sur un unique système.
106 Seulement une personne pouvait modifier un fichier au même moment, ce fonctionnement était assuré par l'utilisation de verrou (``lock''). Il était courant que des personnes ne vérouille
107 des fichiers, et plus tard, oublie de le dévérouiller; empêchant n'importe qui d'autre de
108 travailler sur ces fichiers sans l'aide de l'administrateur...
110 Walter Tichy a développé une alternative libre à \textit{SCCS} au début des années 80, qu'il
111 nomma \textit{RSC (Revison Control System)}. Comme \textit{SCCS}, \textit{RCS}
112 demander aux développeurs de travailler sur le même répertoire partagé, et de vérouiller les
113 fichiers pour se prémunir de tout conflit issue de modifications concurrentes.
115 Un peu plus tard dans les années 1980, Dick Grune utilisa \textit{RCS} comme une brique de base pour un ensemble de scripts \textit{shell} qu'il intitula cmt, avant de la renommer en \textit{CVS (Concurrent Versions System)}. La grande innovation de CVS était que les développeurs pouvaient travailler simultanéement and indépendament dans leur propre espace de travail. Ces espaces de travail privés assuraient que les développeurs ne se marche mutuellement sur les pieds, comme c'était souvent le cas avec RCS et SCCS. Chaque développeur disposait donc de sa copie de tout les fichiers du projet, et ils pouvaient donc librement les modifier. Ils devaient néanmoins effectuer la ``fusion'' (\textit{``merge''}) de leur fichiers, avant d'effectuer le ``commit'' de leur modification sur le dépôt central.
117 Brian Berliner took Grune's original scripts and rewrote them in~C,
118 releasing in 1989 the code that has since developed into the modern
119 version of CVS. CVS subsequently acquired the ability to operate over
120 a network connection, giving it a client/server architecture. CVS's
121 architecture is centralised; only the server has a copy of the history
122 of the project. Client workspaces just contain copies of recent
123 versions of the project's files, and a little metadata to tell them
124 where the server is. CVS has been enormously successful; it is
125 probably the world's most widely used revision control system.
127 In the early 1990s, Sun Microsystems developed an early distributed
128 revision control system, called TeamWare. A TeamWare workspace
129 contains a complete copy of the project's history. TeamWare has no
130 notion of a central repository. (CVS relied upon RCS for its history
131 storage; TeamWare used SCCS.)
133 As the 1990s progressed, awareness grew of a number of problems with
134 CVS. It records simultaneous changes to multiple files individually,
135 instead of grouping them together as a single logically atomic
136 operation. It does not manage its file hierarchy well; it is easy to
137 make a mess of a repository by renaming files and directories. Worse,
138 its source code is difficult to read and maintain, which made the
139 ``pain level'' of fixing these architectural problems prohibitive.
141 In 2001, Jim Blandy and Karl Fogel, two developers who had worked on
142 CVS, started a project to replace it with a tool that would have a
143 better architecture and cleaner code. The result, Subversion, does
144 not stray from CVS's centralised client/server model, but it adds
145 multi-file atomic commits, better namespace management, and a number
146 of other features that make it a generally better tool than CVS.
147 Since its initial release, it has rapidly grown in popularity.
149 More or less simultaneously, Graydon Hoare began working on an
150 ambitious distributed revision control system that he named Monotone.
151 While Monotone addresses many of CVS's design flaws and has a
152 peer-to-peer architecture, it goes beyond earlier (and subsequent)
153 revision control tools in a number of innovative ways. It uses
154 cryptographic hashes as identifiers, and has an integral notion of
155 ``trust'' for code from different sources.
157 Mercurial began life in 2005. While a few aspects of its design are
158 influenced by Monotone, Mercurial focuses on ease of use, high
159 performance, and scalability to very large projects.
161 \section{Trends in revision control}
163 There has been an unmistakable trend in the development and use of
164 revision control tools over the past four decades, as people have
165 become familiar with the capabilities of their tools and constrained
166 by their limitations.
168 The first generation began by managing single files on individual
169 computers. Although these tools represented a huge advance over
170 ad-hoc manual revision control, their locking model and reliance on a
171 single computer limited them to small, tightly-knit teams.
173 The second generation loosened these constraints by moving to
174 network-centered architectures, and managing entire projects at a
175 time. As projects grew larger, they ran into new problems. With
176 clients needing to talk to servers very frequently, server scaling
177 became an issue for large projects. An unreliable network connection
178 could prevent remote users from being able to talk to the server at
179 all. As open source projects started making read-only access
180 available anonymously to anyone, people without commit privileges
181 found that they could not use the tools to interact with a project in
182 a natural way, as they could not record their changes.
184 The current generation of revision control tools is peer-to-peer in
185 nature. All of these systems have dropped the dependency on a single
186 central server, and allow people to distribute their revision control
187 data to where it's actually needed. Collaboration over the Internet
188 has moved from constrained by technology to a matter of choice and
189 consensus. Modern tools can operate offline indefinitely and
190 autonomously, with a network connection only needed when syncing
191 changes with another repository.
193 \section{A few of the advantages of distributed revision control}
195 Even though distributed revision control tools have for several years
196 been as robust and usable as their previous-generation counterparts,
197 people using older tools have not yet necessarily woken up to their
198 advantages. There are a number of ways in which distributed tools
199 shine relative to centralised ones.
201 For an individual developer, distributed tools are almost always much
202 faster than centralised tools. This is for a simple reason: a
203 centralised tool needs to talk over the network for many common
204 operations, because most metadata is stored in a single copy on the
205 central server. A distributed tool stores all of its metadata
206 locally. All else being equal, talking over the network adds overhead
207 to a centralised tool. Don't underestimate the value of a snappy,
208 responsive tool: you're going to spend a lot of time interacting with
209 your revision control software.
211 Distributed tools are indifferent to the vagaries of your server
212 infrastructure, again because they replicate metadata to so many
213 locations. If you use a centralised system and your server catches
214 fire, you'd better hope that your backup media are reliable, and that
215 your last backup was recent and actually worked. With a distributed
216 tool, you have many backups available on every contributor's computer.
218 The reliability of your network will affect distributed tools far less
219 than it will centralised tools. You can't even use a centralised tool
220 without a network connection, except for a few highly constrained
221 commands. With a distributed tool, if your network connection goes
222 down while you're working, you may not even notice. The only thing
223 you won't be able to do is talk to repositories on other computers,
224 something that is relatively rare compared with local operations. If
225 you have a far-flung team of collaborators, this may be significant.
227 \subsection{Advantages for open source projects}
229 If you take a shine to an open source project and decide that you
230 would like to start hacking on it, and that project uses a distributed
231 revision control tool, you are at once a peer with the people who
232 consider themselves the ``core'' of that project. If they publish
233 their repositories, you can immediately copy their project history,
234 start making changes, and record your work, using the same tools in
235 the same ways as insiders. By contrast, with a centralised tool, you
236 must use the software in a ``read only'' mode unless someone grants
237 you permission to commit changes to their central server. Until then,
238 you won't be able to record changes, and your local modifications will
239 be at risk of corruption any time you try to update your client's view
240 of the repository.
242 \subsubsection{The forking non-problem}
244 It has been suggested that distributed revision control tools pose
245 some sort of risk to open source projects because they make it easy to
246 ``fork'' the development of a project. A fork happens when there are
247 differences in opinion or attitude between groups of developers that
248 cause them to decide that they can't work together any longer. Each
249 side takes a more or less complete copy of the project's source code,
250 and goes off in its own direction.
252 Sometimes the camps in a fork decide to reconcile their differences.
253 With a centralised revision control system, the \emph{technical}
254 process of reconciliation is painful, and has to be performed largely
255 by hand. You have to decide whose revision history is going to
256 ``win'', and graft the other team's changes into the tree somehow.
257 This usually loses some or all of one side's revision history.
259 What distributed tools do with respect to forking is they make forking
260 the \emph{only} way to develop a project. Every single change that
261 you make is potentially a fork point. The great strength of this
262 approach is that a distributed revision control tool has to be really
263 good at \emph{merging} forks, because forks are absolutely
264 fundamental: they happen all the time.
266 If every piece of work that everybody does, all the time, is framed in
267 terms of forking and merging, then what the open source world refers
268 to as a ``fork'' becomes \emph{purely} a social issue. If anything,
269 distributed tools \emph{lower} the likelihood of a fork:
270 \begin{itemize}
271 \item They eliminate the social distinction that centralised tools
272 impose: that between insiders (people with commit access) and
273 outsiders (people without).
274 \item They make it easier to reconcile after a social fork, because
275 all that's involved from the perspective of the revision control
276 software is just another merge.
277 \end{itemize}
279 Some people resist distributed tools because they want to retain tight
280 control over their projects, and they believe that centralised tools
281 give them this control. However, if you're of this belief, and you
282 publish your CVS or Subversion repositories publically, there are
283 plenty of tools available that can pull out your entire project's
284 history (albeit slowly) and recreate it somewhere that you don't
285 control. So while your control in this case is illusory, you are
286 forgoing the ability to fluidly collaborate with whatever people feel
287 compelled to mirror and fork your history.
289 \subsection{Advantages for commercial projects}
291 Many commercial projects are undertaken by teams that are scattered
292 across the globe. Contributors who are far from a central server will
293 see slower command execution and perhaps less reliability. Commercial
294 revision control systems attempt to ameliorate these problems with
295 remote-site replication add-ons that are typically expensive to buy
296 and cantankerous to administer. A distributed system doesn't suffer
297 from these problems in the first place. Better yet, you can easily
298 set up multiple authoritative servers, say one per site, so that
299 there's no redundant communication between repositories over expensive
300 long-haul network links.
302 Centralised revision control systems tend to have relatively low
303 scalability. It's not unusual for an expensive centralised system to
304 fall over under the combined load of just a few dozen concurrent
305 users. Once again, the typical response tends to be an expensive and
306 clunky replication facility. Since the load on a central server---if
307 you have one at all---is many times lower with a distributed
308 tool (because all of the data is replicated everywhere), a single
309 cheap server can handle the needs of a much larger team, and
310 replication to balance load becomes a simple matter of scripting.
312 If you have an employee in the field, troubleshooting a problem at a
313 customer's site, they'll benefit from distributed revision control.
314 The tool will let them generate custom builds, try different fixes in
315 isolation from each other, and search efficiently through history for
316 the sources of bugs and regressions in the customer's environment, all
317 without needing to connect to your company's network.
319 \section{Why choose Mercurial?}
321 Mercurial has a unique set of properties that make it a particularly
322 good choice as a revision control system.
323 \begin{itemize}
324 \item It is easy to learn and use.
325 \item It is lightweight.
326 \item It scales excellently.
327 \item It is easy to customise.
328 \end{itemize}
330 If you are at all familiar with revision control systems, you should
331 be able to get up and running with Mercurial in less than five
332 minutes. Even if not, it will take no more than a few minutes
333 longer. Mercurial's command and feature sets are generally uniform
334 and consistent, so you can keep track of a few general rules instead
335 of a host of exceptions.
337 On a small project, you can start working with Mercurial in moments.
338 Creating new changes and branches; transferring changes around
339 (whether locally or over a network); and history and status operations
340 are all fast. Mercurial attempts to stay nimble and largely out of
341 your way by combining low cognitive overhead with blazingly fast
342 operations.
344 The usefulness of Mercurial is not limited to small projects: it is
345 used by projects with hundreds to thousands of contributors, each
346 containing tens of thousands of files and hundreds of megabytes of
347 source code.
349 If the core functionality of Mercurial is not enough for you, it's
350 easy to build on. Mercurial is well suited to scripting tasks, and
351 its clean internals and implementation in Python make it easy to add
352 features in the form of extensions. There are a number of popular and
353 useful extensions already available, ranging from helping to identify
354 bugs to improving performance.
356 \section{Mercurial compared with other tools}
358 Before you read on, please understand that this section necessarily
359 reflects my own experiences, interests, and (dare I say it) biases. I
360 have used every one of the revision control tools listed below, in
361 most cases for several years at a time.
364 \subsection{Subversion}
366 Subversion is a popular revision control tool, developed to replace
367 CVS. It has a centralised client/server architecture.
369 Subversion and Mercurial have similarly named commands for performing
370 the same operations, so if you're familiar with one, it is easy to
371 learn to use the other. Both tools are portable to all popular
372 operating systems.
374 Prior to version 1.5, Subversion had no useful support for merges.
375 At the time of writing, its merge tracking capability is new, and known to be
376 \href{http://svnbook.red-bean.com/nightly/en/svn.branchmerge.advanced.html#svn.branchmerge.advanced.finalword}{complicated
377 and buggy}.
379 Mercurial has a substantial performance advantage over Subversion on
380 every revision control operation I have benchmarked. I have measured
381 its advantage as ranging from a factor of two to a factor of six when
382 compared with Subversion~1.4.3's \emph{ra\_local} file store, which is
383 the fastest access method available. In more realistic deployments
384 involving a network-based store, Subversion will be at a substantially
385 larger disadvantage. Because many Subversion commands must talk to
386 the server and Subversion does not have useful replication facilities,
387 server capacity and network bandwidth become bottlenecks for modestly
388 large projects.
390 Additionally, Subversion incurs substantial storage overhead to avoid
391 network transactions for a few common operations, such as finding
392 modified files (\texttt{status}) and displaying modifications against
393 the current revision (\texttt{diff}). As a result, a Subversion
394 working copy is often the same size as, or larger than, a Mercurial
395 repository and working directory, even though the Mercurial repository
396 contains a complete history of the project.
398 Subversion is widely supported by third party tools. Mercurial
399 currently lags considerably in this area. This gap is closing,
400 however, and indeed some of Mercurial's GUI tools now outshine their
401 Subversion equivalents. Like Mercurial, Subversion has an excellent
402 user manual.
404 Because Subversion doesn't store revision history on the client, it is
405 well suited to managing projects that deal with lots of large, opaque
406 binary files. If you check in fifty revisions to an incompressible
407 10MB file, Subversion's client-side space usage stays constant The
408 space used by any distributed SCM will grow rapidly in proportion to
409 the number of revisions, because the differences between each revision
410 are large.
412 In addition, it's often difficult or, more usually, impossible to
413 merge different versions of a binary file. Subversion's ability to
414 let a user lock a file, so that they temporarily have the exclusive
415 right to commit changes to it, can be a significant advantage to a
416 project where binary files are widely used.
418 Mercurial can import revision history from a Subversion repository.
419 It can also export revision history to a Subversion repository. This
420 makes it easy to ``test the waters'' and use Mercurial and Subversion
421 in parallel before deciding to switch. History conversion is
422 incremental, so you can perform an initial conversion, then small
423 additional conversions afterwards to bring in new changes.
426 \subsection{Git}
428 Git is a distributed revision control tool that was developed for
429 managing the Linux kernel source tree. Like Mercurial, its early
430 design was somewhat influenced by Monotone.
432 Git has a very large command set, with version~1.5.0 providing~139
433 individual commands. It has something of a reputation for being
434 difficult to learn. Compared to Git, Mercurial has a strong focus on
435 simplicity.
437 In terms of performance, Git is extremely fast. In several cases, it
438 is faster than Mercurial, at least on Linux, while Mercurial performs
439 better on other operations. However, on Windows, the performance and
440 general level of support that Git provides is, at the time of writing,
441 far behind that of Mercurial.
443 While a Mercurial repository needs no maintenance, a Git repository
444 requires frequent manual ``repacks'' of its metadata. Without these,
445 performance degrades, while space usage grows rapidly. A server that
446 contains many Git repositories that are not rigorously and frequently
447 repacked will become heavily disk-bound during backups, and there have
448 been instances of daily backups taking far longer than~24 hours as a
449 result. A freshly packed Git repository is slightly smaller than a
450 Mercurial repository, but an unpacked repository is several orders of
451 magnitude larger.
453 The core of Git is written in C. Many Git commands are implemented as
454 shell or Perl scripts, and the quality of these scripts varies widely.
455 I have encountered several instances where scripts charged along
456 blindly in the presence of errors that should have been fatal.
458 Mercurial can import revision history from a Git repository.
461 \subsection{CVS}
463 CVS is probably the most widely used revision control tool in the
464 world. Due to its age and internal untidiness, it has been only
465 lightly maintained for many years.
467 It has a centralised client/server architecture. It does not group
468 related file changes into atomic commits, making it easy for people to
469 ``break the build'': one person can successfully commit part of a
470 change and then be blocked by the need for a merge, causing other
471 people to see only a portion of the work they intended to do. This
472 also affects how you work with project history. If you want to see
473 all of the modifications someone made as part of a task, you will need
474 to manually inspect the descriptions and timestamps of the changes
475 made to each file involved (if you even know what those files were).
477 CVS has a muddled notion of tags and branches that I will not attempt
478 to even describe. It does not support renaming of files or
479 directories well, making it easy to corrupt a repository. It has
480 almost no internal consistency checking capabilities, so it is usually
481 not even possible to tell whether or how a repository is corrupt. I
482 would not recommend CVS for any project, existing or new.
484 Mercurial can import CVS revision history. However, there are a few
485 caveats that apply; these are true of every other revision control
486 tool's CVS importer, too. Due to CVS's lack of atomic changes and
487 unversioned filesystem hierarchy, it is not possible to reconstruct
488 CVS history completely accurately; some guesswork is involved, and
489 renames will usually not show up. Because a lot of advanced CVS
490 administration has to be done by hand and is hence error-prone, it's
491 common for CVS importers to run into multiple problems with corrupted
492 repositories (completely bogus revision timestamps and files that have
493 remained locked for over a decade are just two of the less interesting
494 problems I can recall from personal experience).
496 Mercurial can import revision history from a CVS repository.
499 \subsection{Commercial tools}
501 Perforce has a centralised client/server architecture, with no
502 client-side caching of any data. Unlike modern revision control
503 tools, Perforce requires that a user run a command to inform the
504 server about every file they intend to edit.
506 The performance of Perforce is quite good for small teams, but it
507 falls off rapidly as the number of users grows beyond a few dozen.
508 Modestly large Perforce installations require the deployment of
509 proxies to cope with the load their users generate.
512 \subsection{Choosing a revision control tool}
514 With the exception of CVS, all of the tools listed above have unique
515 strengths that suit them to particular styles of work. There is no
516 single revision control tool that is best in all situations.
518 As an example, Subversion is a good choice for working with frequently
519 edited binary files, due to its centralised nature and support for
520 file locking.
522 I personally find Mercurial's properties of simplicity, performance,
523 and good merge support to be a compelling combination that has served
524 me well for several years.
527 \section{Switching from another tool to Mercurial}
529 Mercurial is bundled with an extension named \hgext{convert}, which
530 can incrementally import revision history from several other revision
531 control tools. By ``incremental'', I mean that you can convert all of
532 a project's history to date in one go, then rerun the conversion later
533 to obtain new changes that happened after the initial conversion.
535 The revision control tools supported by \hgext{convert} are as
536 follows:
537 \begin{itemize}
538 \item Subversion
539 \item CVS
540 \item Git
541 \item Darcs
542 \end{itemize}
544 In addition, \hgext{convert} can export changes from Mercurial to
545 Subversion. This makes it possible to try Subversion and Mercurial in
546 parallel before committing to a switchover, without risking the loss
547 of any work.
549 The \hgxcmd{conver}{convert} command is easy to use. Simply point it
550 at the path or URL of the source repository, optionally give it the
551 name of the destination repository, and it will start working. After
552 the initial conversion, just run the same command again to import new
553 changes.
556 %%% Local Variables:
557 %%% mode: latex
558 %%% TeX-master: "00book"
559 %%% End: