Mercurial > hgbook
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 |
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: |