annotate en/intro.tex @ 218:75fd236d736b

History of SCM tools.
author Bryan O'Sullivan <bos@serpentine.com>
date Thu, 10 May 2007 17:21:09 -0700
parents 369858a4d63c
children 15a6fd2ba582
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
81454425eee9 Progress on a few fronts, mainly indexing and MQ chapter content
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1 \chapter{Introduction}
81454425eee9 Progress on a few fronts, mainly indexing and MQ chapter content
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
2 \label{chap:intro}
81454425eee9 Progress on a few fronts, mainly indexing and MQ chapter content
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
3
217
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
4 \section{About revision control}
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
5
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
6 Revision control is the management of multiple versions of a piece of
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
7 information. In its simplest form, it's a process that many people
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
8 perform by hand: every time you modify a file, save it under a new
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
9 name that contains a number, each one higher than the number of the
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
10 preceding version.
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
11
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
12 Manually managing multiple versions of even a single file is an
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
13 error-prone task, though, so software tools to help automate this
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
14 process have long been available. The earliest automated revision
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
15 control tools were intended to help a single user to manage revisions
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
16 to a single file. Over the past several decades, the scope of
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
17 revision control tools has expanded greatly; they now manage multiple
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
18 files, and help multiple people to work together. The best modern
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
19 revision control tools will have no problem coping with thousands of
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
20 people working together on a single project, which might consist of
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
21 hundreds of thousands of files.
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
22
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
23 \subsection{Why use revision control?}
155
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
24
217
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
25 There are a number of reasons why you or your team might want to use
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
26 an automated revision control tool for a project.
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
27 \begin{itemize}
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
28 \item The software gives you a unified way of working with your
218
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
29 project's files.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
30 \item When you're working with other people, it makes it easier for
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
31 you to collaborate. For example, when people more or less
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
32 simultaneously make potentially incompatible changes, the software
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
33 will help you to identify and resolve those conflicts.
217
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
34 \item It will track the history of your project. For every change,
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
35 you'll have a log of \emph{who} made it; \emph{why} they made it;
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
36 \emph{when} they made it; and \emph{what} the change was.
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
37 \item It can help you to recover from mistakes. If you make a change
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
38 that later turns out to be in error, you can revert to an earlier
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
39 version of one or more files. In fact, a \emph{really} good
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
40 revision control tool will even help you to efficiently figure out
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
41 exactly when a problem was introduced (see
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
42 section~\ref{sec:undo:bisect} for details).
218
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
43 \item It will help you to work simultaneously on, and manage the drift
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
44 between, multiple versions of your project.
217
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
45 \end{itemize}
218
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
46 Most of these reasons are equally valid---at least in theory---whether
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
47 you're working on a project by yourself, or with a hundred other
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
48 people.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
49
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
50 A key question about the practicality of revision control at these two
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
51 different scales (``lone hacker'' and ``huge team'') is how its
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
52 \emph{benefits} compare to its \emph{costs}. A revision control tool
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
53 that's difficult to understand or use is going to impose a high cost.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
54
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
55 For example, a five-hundred-person project is likely to collapse under
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
56 its own weight almost immediately without a revision control tool and
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
57 process. In this case, the cost of using revision control might
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
58 hardly seem worth considering, since \emph{without} it, failure is
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
59 almost guaranteed.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
60
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
61 On the other hand, a one-person ``quick hack'' might seem like a poor
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
62 place to use a revision control tool, because surely the cost of using
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
63 one must be close to the overall cost of the project. Right?
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
64
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
65 Mercurial uniquely supports \emph{both} of these scales of
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
66 development. You can learn the basics in just a few minutes, and due
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
67 to its low overhead, you can apply revision control to the smallest of
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
68 projects with ease. Its simplicity means you won't have a lot of
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
69 abstruse concepts or command sequences competing for mental space with
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
70 whatever you're \emph{really} trying to do. At the same time,
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
71 Mercurial's high performance and peer-to-peer nature let you scale
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
72 painlessly to handle large projects.
217
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
73
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
74 \subsection{The many names of revision control}
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
75
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
76 Revision control is a diverse field, so much so that it doesn't
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
77 actually have a single name or acronym. Here are a few of the more
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
78 common names and acronyms you'll encounter:
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
79 \begin{itemize}
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
80 \item Configuration management (CM)
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
81 \item Revision control (RCS)
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
82 \item Software configuration management (SCM)
218
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
83 \item Source code management
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
84 \item Source control
217
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
85 \item Version control (VCS)
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
86 \end{itemize}
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
87 Some people claim that these terms actually have different meanings,
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
88 but in practice they overlap so much that there's no agreed or even
369858a4d63c Start to flesh out chapter 1.
Bryan O'Sullivan <bos@serpentine.com>
parents: 155
diff changeset
89 useful way to tease them apart.
155
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
90
218
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
91 \section{A short history and hierarchy of revision control}
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
92
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
93 The best known of the old-time revision control tools is SCCS (Source
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
94 Code Control System), which Marc Rochkind wrote at Bell Labs, in the
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
95 early 1970s. SCCS operated on individual files, and required every
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
96 person working on a project to have access to a shared workspace on a
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
97 single system. Only one person could modify a file at any time;
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
98 arbitration for access to files was via locks. It was common for
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
99 people to lock files, and later forget to unlock them, preventing
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
100 anyone else from modifying those files without the help of an
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
101 administrator.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
102
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
103 Walter Tichy developed a free alternative to SCCS in the early 1980s;
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
104 he called his program RCS (Revison Control System). Like SCCS, RCS
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
105 required developers to work in a single shared workspace, and to lock
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
106 files to prevent multiple people from modifying them simultaneously.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
107
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
108 Later in the 1980s, Dick Grune used RCS as a building block for a set
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
109 of shell scripts he initially called cmt, but then renamed to CVS
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
110 (Concurrent Versions System). The big innovation of CVS was that it
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
111 let developers work simultaneously and somewhat independently in their
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
112 own personal workspaces. The personal workspaces prevented developers
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
113 from stepping on each other's toes all the time, as was common with
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
114 SCCS and RCS. Each developer had a copy of every project file, and
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
115 could modify their copies independently. They had to merge their
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
116 edits prior to committing changes to the central repository.
155
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
117
218
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
118 Brian Berliner took Grune's original scripts and rewrote them in~C,
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
119 releasing in 1989 the code that has since developed into the modern
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
120 version of CVS. CVS subsequently acquired the ability to operate over
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
121 a network connection, giving it a client/server architecture. CVS's
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
122 architecture is centralised; only the server has a copy of the history
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
123 of the project. Client workspaces just contain copies of recent
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
124 versions of the project's files, and a little metadata to tell them
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
125 where the server is. CVS has been enormously successful; it is
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
126 probably the world's most widely used revision control system.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
127
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
128 In the early 1990s, Sun Microsystems developed an early distributed
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
129 revision control system, called TeamWare. A TeamWare workspace
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
130 contains a complete copy of the project's history. TeamWare has no
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
131 notion of a central repository. (CVS relied upon RCS for its history
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
132 storage; TeamWare used SCCS.)
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
133
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
134 As the 1990s progressed, awareness grew of a number of problems with
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
135 CVS. It records simultaneous changes to multiple files individually,
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
136 instead of grouping them together as a single logically atomic
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
137 operation. It does not manage its file hierarchy well; it is easy to
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
138 make a mess of a repository by renaming files and directories. Worse,
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
139 its source code is difficult to read and maintain, which made the
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
140 ``pain level'' of fixing these architectural problems prohibitive.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
141
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
142 In 2001, Jim Blandy and Karl Fogel, two developers who had worked on
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
143 CVS, started a project to replace it with a tool that would have a
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
144 better architecture and cleaner code. The result, Subversion, does
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
145 not stray from CVS's centralised client/server model, but it adds
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
146 multi-file atomic commits, better namespace management, and a number
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
147 of other features that make it a generally better tool than CVS.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
148 Since its initial release, it has rapidly grown in popularity.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
149
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
150 More or less simultaneously, Graydon Hoare began working on an
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
151 ambitious distributed revision control system that he named Monotone.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
152 While Monotone addresses many of CVS's design flaws and has a
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
153 peer-to-peer architecture, it goes beyond earlier (and subsequent)
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
154 revision control tools in a number of innovative ways. It uses
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
155 cryptographic hashes as identifiers, and has an integral notion of
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
156 ``trust'' for code from different sources.
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
157
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
158 Mercurial began life in 2005. While a few aspects of its design are
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
159 influenced by Monotone, Mercurial focuses on ease of use, high
75fd236d736b History of SCM tools.
Bryan O'Sullivan <bos@serpentine.com>
parents: 217
diff changeset
160 performance, and scalability to very large projects.
155
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
161
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
162 \subsection{On a single system}
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
163
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
164 \subsection{Network-based, but centralised}
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
165
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
166 \subsection{Fully distributed}
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
167
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
168
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
169 \section{Advantages of distributed revision control}
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
170
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
171 \subsection{For open source projects}
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
172
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
173 \subsection{For commercial projects}
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
174
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
175 \subsection{Myths about distributed revision control}
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
176
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
177 \section{Why choose Mercurial?}
914babdc99c8 run-example: better error if bogus section name found.
Bryan O'Sullivan <bos@serpentine.com>
parents: 16
diff changeset
178
16
81454425eee9 Progress on a few fronts, mainly indexing and MQ chapter content
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
179
81454425eee9 Progress on a few fronts, mainly indexing and MQ chapter content
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
180 %%% Local Variables:
81454425eee9 Progress on a few fronts, mainly indexing and MQ chapter content
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
181 %%% mode: latex
81454425eee9 Progress on a few fronts, mainly indexing and MQ chapter content
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
182 %%% TeX-master: "00book"
81454425eee9 Progress on a few fronts, mainly indexing and MQ chapter content
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
183 %%% End: