Mercurial > CVu-Mercurial
annotate Hg.tex @ 10:2e4d690ffabb
Tart up PDF output with clickable links and doc info.
author | Jim Hague <jim.hague@acm.org> |
---|---|
date | Fri, 22 May 2009 11:04:47 +0100 |
parents | 2155510c62f3 |
children | 03d0ebf7ce0b |
rev | line source |
---|---|
9
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
1 \documentclass[a4paper]{article} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
2 \usepackage{pslatex} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
3 \usepackage{url} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
4 |
10
2e4d690ffabb
Tart up PDF output with clickable links and doc info.
Jim Hague <jim.hague@acm.org>
parents:
9
diff
changeset
|
5 \usepackage[pdftex]{hyperref} |
2e4d690ffabb
Tart up PDF output with clickable links and doc info.
Jim Hague <jim.hague@acm.org>
parents:
9
diff
changeset
|
6 \hypersetup{ |
2e4d690ffabb
Tart up PDF output with clickable links and doc info.
Jim Hague <jim.hague@acm.org>
parents:
9
diff
changeset
|
7 pdfauthor={Jim Hague}, |
2e4d690ffabb
Tart up PDF output with clickable links and doc info.
Jim Hague <jim.hague@acm.org>
parents:
9
diff
changeset
|
8 pdftitle={Inside a distributed version control system}, |
2e4d690ffabb
Tart up PDF output with clickable links and doc info.
Jim Hague <jim.hague@acm.org>
parents:
9
diff
changeset
|
9 colorlinks} |
2e4d690ffabb
Tart up PDF output with clickable links and doc info.
Jim Hague <jim.hague@acm.org>
parents:
9
diff
changeset
|
10 |
9
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
11 \newcommand{\standout}[1]{ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
12 {\begin{center} \large \textbf{#1} \end{center}} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
13 } |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
14 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
15 \setlength{\parskip}{2mm} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
16 \setlength{\parindent}{0mm} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
17 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
18 \begin{document} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
19 \title{Inside a distributed version control system} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
20 \author{Jim Hague\\ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
21 \texttt{jim.hague@acm.org}} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
22 \date{May 2009} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
23 \maketitle |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
24 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
25 \section{Preamble} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
26 Grinton Lodge is a Youth Hostel that sits on an exposed hillside just |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
27 above the small hamlet of Grinton in Swaledale, in the Yorkshire Dales |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
28 National Park. A former Victorian shooting lodge, it now welcomes |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
29 walkers and other travellers from around the world. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
30 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
31 Tonight, a Wednesday in mid-November, is not one of its busiest |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
32 nights. Kat, the duty staff member, tells me that there is a small |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
33 corporate team-building group in the annex. There's no sign of them at |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
34 present. Otherwise, that portion of the world that has beaten a path |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
35 to the door of this grand building today consists of just me. And Kat |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
36 goes home soon. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
37 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
38 The November CVu, removed from its wrappers and read yesterday, lies |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
39 in my bag. Taunting me. Go on, it says, if you've ever going to put |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
40 finger to keyboard in the name of CVu, well, tonight you are out of |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
41 excuses. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
42 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
43 Bugger. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
44 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
45 \section{Let's look into Mercurial} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
46 If you're at all interested in version control systems~--- and any |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
47 software developer not using one daily is a strange beast indeed~--- |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
48 you'll at least have become vaguely aware in the last few years of the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
49 growing maturity of the latest group of version control systems |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
50 offering funky new stuff. These are the distributed version control |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
51 systems (DVCS). There is more to them than just their headline |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
52 attributes, being able to check history and do checkins while |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
53 disconnected from a central server, but these are damm useful to start |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
54 with. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
55 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
56 When I first heard about DVCS, it wasn't immediately obvious to me (to |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
57 put it mildly) how they would work. After years of using a centralised |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
58 version control system, I had rough mental model of what went on. But |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
59 how do you cope without the central server forcing ordering onto the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
60 changes? |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
61 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
62 Since then I've started using Mercurial\footnote{ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
63 \url{http://www.selenic.com/mercurial}}. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
64 Mercurial is a DVCS. It's one of |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
65 three DVCSs that have gained significant popularity in the last few |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
66 years, the other two being Git\footnote{\url{http://git-scm.com}} and |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
67 Bazaar\footnote{\url{http://bazaar-vcs.org/}}. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
68 I switched a significant work project over |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
69 to Mercurial (from Subversion) in mid-2007, because a customer site |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
70 required on-site work but could not allow access back to the company |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
71 VPN. I chose Mercurial for a variety of reasons which I won't bore you |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
72 with here\footnote{ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
73 OK, if you must know: |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
74 \begin{itemize} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
75 \item Implementability. I needed the system to work on Windows, Linux and |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
76 AIX. The latter was not one of the directly supported platforms for |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
77 any of the candidates. Git's implementation uses a horde of |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
78 tools. Bazaar requires only Python, but required Python 2.4 while IBM |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
79 stubbornly still supplies only Python 2.3. Mercurial requires Python |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
80 2.3 or greater, and uses some C for speed. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
81 \item Simplicity. My users used Subversion daily, but did not generally |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
82 have much experience with other VCS. From the command line, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
83 Mercurial's core operations will be familiar to a Subversion |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
84 user. This is also true of Bazaar, but was less true of Git. Git has |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
85 improved in this matter since then, but a Mr Winder of this parish |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
86 tells me that it's still possible to seriously embarrass |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
87 yourself. There was also a lack of Windows support for Git at the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
88 time. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
89 \item Speed. Mercurial is fast. In the same ballpark as Git. Bazaar |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
90 wasn't, and although it has improved significantly, has, in my |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
91 estimation, added user complexity in the process, and at the time |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
92 of writing is still off the pace for some operations. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
93 \item Documentation. At the time, Bryan O'Sullivan's excellent Mercurial |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
94 book (\url{http://hgbook.red-bean.com}) was a clear winner for best |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
95 documentation. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
96 \end{itemize}}. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
97 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
98 What I want to do in this article is give you an insight into how a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
99 DVCS works. OK, so specifically I'm going to be talking about |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
100 Mercurial, but Git and Bazaar attack the problem in a similar way. But |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
101 first I'd better give you some idea of how you use Mercurial. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
102 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
103 \subsection{The 5 minute Mercurial overview} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
104 \subsubsection{The basics} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
105 I think it unlikely that someone possessing the taste and discernment |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
106 to be reading CVu would not be familiar with at least one version |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
107 control system. So, while I want to give you a flavour of what it's |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
108 like to use, I'm not going to hang about. If you'd like a proper |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
109 introduction, or you don't follow something, I thoroughly recommend |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
110 you consult the Mercurial book. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
111 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
112 To start using Mercurial to keep track of a project. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
113 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
114 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
115 $ hg init |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
116 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
117 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
118 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
119 This creates the repository root in the current directory. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
120 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
121 Like CVS\footnote{\url{http://www.nongnu.org/cvs/}} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
122 with its \texttt{CVS} directory and |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
123 Subversion\footnote{\url{http://subversion.tigris.org/}} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
124 with its \texttt{.svn} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
125 directory, Mercurial keeps its private data in a directory. Mercifully there is |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
126 only one of these, in the top level of your project. And rather than |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
127 holding details of where the actual repository is to be found, the \texttt{.hg} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
128 directory holds the entire repository. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
129 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
130 Next you need to specify the files you want Mercurial to track. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
131 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
132 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
133 $ echo "There was a gibbon one morning" > pome.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
134 $ hg add pome.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
135 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
136 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
137 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
138 As you might expect, this marks the files as to be added. And as you |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
139 might also expect, you need to commit to record the added files in the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
140 repository. The commit comment can be supplied on the command line; if |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
141 you don't supply a comment, you'll be dropped into an editor to |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
142 provide one. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
143 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
144 There is a suggested format for these messages~--- a one line summary |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
145 followed by any more required detail on following lines. By default |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
146 Mercurial will only display the first line of commit messages when |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
147 listing changes. In these examples I'll stick to terse messages, and |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
148 I'll enter them from the command line. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
149 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
150 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
151 $ hg commit -m "My Pome" -u "Jim Hague <jim.hague@acm.org>" |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
152 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
153 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
154 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
155 Mercurial records the user making the change as part of the change |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
156 information. It is usual to give your name and email address as I've |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
157 done here. You can imagine, though, that constantly having to repeat |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
158 this is a bit tedious, so you can set a default user name in a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
159 configuration file. Mercurial keeps global, user and repository |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
160 configurations, and it can go in any of those. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
161 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
162 As with Subversion, after further edits you see how your working copy |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
163 differs from the repository. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
164 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
165 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
166 $ hg status |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
167 M pome.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
168 $ hg diff |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
169 diff -r 33596ef855c1 pome.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
170 --- a/pome.txt Wed Apr 23 22:36:33 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
171 +++ b/pome.txt Wed Apr 23 22:48:01 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
172 @@ -1,1 +1,2 @@ There was a gibbon one morning |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
173 There was a gibbon one morning |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
174 +said "I think I will fly to the moon". |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
175 $ hg commit -m "A great second line" |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
176 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
177 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
178 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
179 And look through a log of changes. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
180 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
181 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
182 $ hg log |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
183 changeset: 1:3d65e7a57890 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
184 tag: tip |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
185 user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
186 date: Wed Apr 23 22:49:10 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
187 summary: A great second line |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
188 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
189 changeset: 0:33596ef855c1 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
190 user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
191 date: Wed Apr 23 22:36:33 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
192 summary: My Pome |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
193 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
194 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
195 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
196 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
197 There are some items here that need an explanation. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
198 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
199 The changeset identifier is in fact two identifiers separated by a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
200 colon. The first is the sequence number of the changeset in the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
201 repository, and is directly comparable to the change number in a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
202 Subversion repository. The second is a globally unique identifier for |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
203 that change. As the change is copied from one repository to another |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
204 (this is a distributed system, remember, even if we haven't come to |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
205 that bit yet), its sequence number in any particular repository will |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
206 change, but the global identifier will always remain the same. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
207 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
208 \texttt{tip} is a Mercurial term. It means simply the most recent change. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
209 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
210 Want to rename a file? |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
211 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
212 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
213 $ hg mv pome.txt poem.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
214 $ hg status |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
215 A poem.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
216 R pome.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
217 $ hg commit -m "Rename my file" |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
218 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
219 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
220 (The command to rename a file is actually \texttt{hg rename}, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
221 but Mercurial saves Unix-trained fingers from |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
222 typing embarrassment.) |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
223 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
224 At this point you may be wondering about directories. \texttt{hg mkdir} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
225 perhaps? Well, no. Mercurial only tracks files. To be sure, the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
226 directory a file occupies is tracked, but effectively only as a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
227 component of the file name. This has the slightly unexpected result |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
228 that you can't record an empty directory in your repository.\footnote{ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
229 I tripped over this converting a work Subversion |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
230 repository. One possibility is to create a placeholder file in the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
231 directory. In the event I created the directory (which receives build |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
232 products) as part of the build instead.} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
233 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
234 Given this, and the status output above that suggests strongly that |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
235 Mercurial treats a rename as a copy followed by a delete, you may be |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
236 worried that Mercurial won't cope at all well with rearranging your |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
237 repository. Relax. Mercurial does store the details of the rename as |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
238 part of the changeset, and copes very well with rearrangements\footnote{ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
239 The Mercurial designers justify not dealing with |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
240 directories as first class objects by pointing out that provided you |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
241 can correctly move files about in the tree, the other reasons for |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
242 tracking directories are uncommon and do not in their opinion justify |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
243 the considerable added complexity. So far I've found no reason to |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
244 doubt that judgement.}. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
245 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
246 Want to rewind the working copy to a previous revision? |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
247 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
248 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
249 $ hg update -r 1 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
250 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
251 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
252 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
253 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
254 \texttt{hg update} updates the working files. In this case I'm specifying |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
255 that I want to go back to local changeset 1. I could also have typed |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
256 \texttt{-r 3d65e7a57890}, or even \texttt{-r 3d}; |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
257 when specifying the global change |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
258 identifier you only need to type enough digits to make it unique. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
259 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
260 This is all very well, but it's not exactly distributed, is it? |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
261 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
262 \subsubsection{Going distributed} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
263 A version control system goes Distributed by allowing multiple copies |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
264 of the repository to exist, and work to be done in all those |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
265 repositories in parallel. So when you start work on an existing |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
266 project, the first thing to do is to get your own copy of the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
267 repository. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
268 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
269 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
270 elsewhere$ hg clone ssh://jim.home.net/Poem Jim-Poem |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
271 updating working directory |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
272 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
273 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
274 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
275 Mercurial lets you access other repositories via the file system, over http or |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
276 over ssh. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
277 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
278 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
279 elsewhere$ cd Jim-Poem |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
280 elsewhere$ hg log |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
281 changeset: 3:a065eb26e6b9 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
282 tag: tip |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
283 user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
284 date: Thu Apr 24 18:52:31 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
285 summary: Rename my file |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
286 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
287 changeset: 2:ff97668b7422 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
288 user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
289 date: Thu Apr 24 18:50:22 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
290 summary: Finished first verse |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
291 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
292 changeset: 1:3d65e7a57890 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
293 user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
294 date: Wed Apr 23 22:49:10 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
295 summary: A great second line |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
296 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
297 changeset: 0:33596ef855c1 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
298 user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
299 date: Wed Apr 23 22:36:33 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
300 summary: My Pome |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
301 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
302 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
303 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
304 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
305 \texttt{hg clone} is aptly named. It creates a new repository that contains |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
306 exactly the same changes as the source repository. You can make a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
307 clone just by copying your project directory, if you're confident |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
308 nothing else will access it during the copy. \texttt{hg clone} saves you this |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
309 worry, and sets the default push/pull location in the new repo to the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
310 cloned repo. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
311 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
312 From that point, you use \texttt{hg pull} to collect changes from other |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
313 places into your repo (though note it does not by default update your |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
314 working copy), and, as you might guess, \texttt{hg push} shoves your changes |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
315 into a foreign repository. By default these will act on the repository |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
316 you cloned from, but you can specify any other repository. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
317 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
318 More on those in a moment. First, though, I want to show you something |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
319 you can't do in Subversion. Start with the repository with 4 changes |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
320 we just cloned. I want to focus on the first couple of lines, so I'll |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
321 wind the working copy back to the point where only those lines exist. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
322 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
323 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
324 $ hg update -r 1 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
325 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
326 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
327 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
328 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
329 And make a change. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
330 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
331 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
332 $ hg diff |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
333 diff -r 3d65e7a57890 pome.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
334 --- a/pome.txt Wed Apr 23 22:49:10 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
335 +++ b/pome.txt Thu Apr 24 19:13:14 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
336 @@ -1,2 +1,2 @@ There was a gibbon one morning |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
337 -There was a gibbon one morning |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
338 -said "I think I will fly to the moon". |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
339 +There was a baboon who one afternoon |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
340 +said "I think I will fly to the sun". |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
341 $ hg commit -m "Better first two lines" |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
342 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
343 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
344 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
345 The alert among you will have sat up at that. Well done! Yes, there's |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
346 something very worrying. How can I commit a change at an old point? |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
347 If you try this in Subversion, it will complain mightily about your |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
348 file being out of date. But Mercurial just went ahead and did |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
349 something. The Bazaar experts among you will know that in Bazaar, if |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
350 you use \texttt{bzr revert -r} to bring the working copy to a past revision, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
351 make a change and commit, then your latest version will be the past |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
352 revision plus your change. Perhaps that's what Mercurial did? |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
353 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
354 No. What Mercurial did is central to Mercurial's view of the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
355 world. You took your working copy back to an old changeset, and then |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
356 committed a fresh change based at that changeset. Mercurial actually |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
357 did just what you asked it to do, no more and no less. Let's see the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
358 initial evidence. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
359 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
360 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
361 $ hg heads |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
362 changeset: 4:267d32f158b3 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
363 tag: tip |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
364 parent: 1:3d65e7a57890 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
365 user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
366 date: Thu Apr 24 19:13:59 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
367 summary: Better first two lines |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
368 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
369 changeset: 3:a065eb26e6b9 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
370 user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
371 date: Thu Apr 24 18:52:31 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
372 summary: Rename my file |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
373 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
374 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
375 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
376 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
377 Time for some more Mercurial terminology. You can think of a \texttt{head} in |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
378 Mercurial as the most recent change on a branch. In Mercurial, a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
379 branch is simply what happens when you commit a change that has as its |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
380 parent a change that already has a child. Mercurial has a standard |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
381 extension \texttt{hg glog} which uses some ASCII art to show the current |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
382 state: |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
383 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
384 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
385 $ hg glog |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
386 @ changeset: 4:267d32f158b3 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
387 | tag: tip |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
388 | parent: 1:3d65e7a57890 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
389 | user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
390 | date: Thu Apr 24 19:13:59 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
391 | summary: Better first two lines |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
392 | |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
393 | o changeset: 3:a065eb26e6b9 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
394 | | user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
395 | | date: Thu Apr 24 18:52:31 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
396 | | summary: Rename my file |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
397 | | |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
398 | o changeset: 2:ff97668b7422 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
399 |/ user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
400 | date: Thu Apr 24 18:50:22 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
401 | summary: Finished first verse |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
402 | |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
403 o changeset: 1:3d65e7a57890 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
404 | user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
405 | date: Wed Apr 23 22:49:10 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
406 | summary: A great second line |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
407 | |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
408 o changeset: 0:33596ef855c1 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
409 user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
410 date: Wed Apr 23 22:36:33 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
411 summary: My Pome |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
412 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
413 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
414 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
415 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
416 \texttt{hg view} shows a nicer graphical view\footnote{Though, being |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
417 Tcl/Tk based, not that much nicer.}. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
418 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
419 So the change is in there. It's the latest change, and is simply on a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
420 different branch to the other changes. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
421 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
422 Almost invariably, you will want to bring everything back together and |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
423 merge the branches. A merge is a change that combines two heads back |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
424 into one. It prepares an updated working directory with the merged |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
425 contents of the two heads for you to review and, if satisfactory, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
426 commit. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
427 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
428 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
429 $ hg merge |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
430 merging pome.txt and poem.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
431 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
432 (branch merge, don't forget to commit) |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
433 $ cat poem.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
434 There was a baboon who one afternoon |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
435 said "I think I will fly to the sun". |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
436 So with two great palms strapped to his arms, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
437 he started his takeoff run. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
438 $ hg commit -m "Merge first line branch" |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
439 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
440 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
441 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
442 (I'm no poet. The poem is, of |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
443 course, \textit{Silly Old Baboon} by the late, great, Spike |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
444 Milligan. From \textit{A Book of Milliganimals}, Puffin, 1971.) |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
445 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
446 Here's the ASCII art again showing what just happened. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
447 Oh, and notice in the above that Mercurial has done the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
448 right thing with regard to the rename. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
449 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
450 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
451 $ hg glog |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
452 @ changeset: 5:792ab970fc80 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
453 |\ tag: tip |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
454 | | parent: 4:267d32f158b3 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
455 | | parent: 3:a065eb26e6b9 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
456 | | user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
457 | | date: Thu Apr 24 19:29:53 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
458 | | summary: Merge first line branch |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
459 | | |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
460 | o changeset: 4:267d32f158b3 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
461 | | parent: 1:3d65e7a57890 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
462 | | user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
463 | | date: Thu Apr 24 19:13:59 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
464 | | summary: Better first two lines |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
465 | | |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
466 o | changeset: 3:a065eb26e6b9 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
467 | | user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
468 | | date: Thu Apr 24 18:52:31 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
469 | | summary: Rename my file |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
470 | | |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
471 o | changeset: 2:ff97668b7422 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
472 |/ user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
473 | date: Thu Apr 24 18:50:22 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
474 | summary: Finished first verse |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
475 | |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
476 o changeset: 1:3d65e7a57890 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
477 | user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
478 | date: Wed Apr 23 22:49:10 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
479 | summary: A great second line |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
480 | |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
481 o changeset: 0:33596ef855c1 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
482 user: Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
483 date: Wed Apr 23 22:36:33 2008 +0100 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
484 summary: My Pome |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
485 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
486 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
487 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
488 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
489 So, our little branch change has now been merged back, and we have a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
490 single line of development again. Notice that unlike the other |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
491 changesets, changeset 5 has two parent changesets, indicating it is a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
492 merge changeset. You can only merge two branches in one operation; or |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
493 putting it another way, a changeset can have a maximum of two parents. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
494 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
495 This behaviour is absolutely central to Mercurial's philosophy. If a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
496 change is committed that takes as its starting point a change that |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
497 already has a child, then a branch gets created. Working with |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
498 Mercurial, branches get created frequently, and equally frequently |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
499 merged back. As befits any frequent operation, both are easy to do. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
500 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
501 You're probably thinking at this point that this making a commit onto |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
502 an old version is a slightly strange thing to do, and you'd be right. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
503 But that's exactly what's going to happen the moment you go |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
504 distributed. Two people working independently with their own |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
505 repositories are going to make commits based, typically, on the latest |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
506 changes they happen to have incorporated into their tree. To be |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
507 Distributed, a DVCS has to deal with this. Mercurial faces it head-on. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
508 When you pull changes into your repo (or someone else pushes them), if |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
509 any of the changes overlap~--- are both based on the same base change~--- |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
510 you get extra heads, and it's up to you to let these extra heads live |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
511 or merge, as you please. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
512 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
513 In practice this is more manageable then you might think. Consider a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
514 typical Mercurial usage, where the 'master' repo sits on a known |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
515 server, and everyone pulls changes from the master and pushes their |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
516 own efforts to the master. But default Mercurial won't let you push if |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
517 the receiving repo will gain an extra head as a result, so you |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
518 typically pull (and do any required merging) just before |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
519 pushing. Subversion users will recognised this pattern. Subversion |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
520 won't let you commit a change if your working copy is not at the very |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
521 latest revision, so the Subversion user will update, and merge if |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
522 necessary, just before committing. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
523 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
524 What, then, about a branch in the conventional sense of '1.0 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
525 maintenance branch'? Typically in Mercurial you'd handle this by |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
526 keeping a separate cloned repository for those changes. Cloning is |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
527 fast, and if local uses hard links where possible on filesystems that |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
528 support them, so isn't necessarily extravagant on disc space. You can, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
529 if you prefer, handle them all in a single repo with 'named |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
530 branches', but cloning is definitely simpler. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
531 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
532 OK, so now you know the basics of using Mercurial. We can proceed to |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
533 looking at how this magic is achieved. In particular, where does this |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
534 magic globally unique identifier for a change come from? |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
535 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
536 \subsection{Inside the Mercurial repo} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
537 The way Mercurial handles its repo is really quite simple. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
538 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
539 That's simple, as in 'most things are simple once you know the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
540 answer'. I found the explanation helpful\footnote{For the curious, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
541 Bryan O'Sullivan's excellent Mercurial book |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
542 has a chapter on the subject, and the Mercurial website has a fair amount |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
543 of detail too.}, so this section attempts |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
544 the 10,000ft (FL100 if you prefer) view of Mercurial. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
545 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
546 First remember that any file or component can only have one or two |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
547 parents. You can't merge more than one other branch at once. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
548 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
549 We start with the basic building block, which Mercurial calls a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
550 revlog. A revlog is a thing that holds a file and all the changes in |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
551 the file history\footnote{For any non-trivial file, this will |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
552 actually be two files on the disc, a data file and an index.}. The |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
553 revlog stores the differences between successive versions |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
554 of the file, though it will periodically store a complete version of |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
555 the file instead of a difference, so that the content of any |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
556 particular file version can always be reconstructed without excessive |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
557 effort. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
558 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
559 Under the secret-squirrel Mercurial \texttt{.hg} directory at the top of your |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
560 project is a store which holds a revlog for each file in your |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
561 project. So you have the complete history of the project locally. No |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
562 more round trips to the server. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
563 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
564 Both the differences between successive versions and the periodic |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
565 complete versions of a file are compressed before storing. This is |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
566 surprisingly effective at minimising the storage requirements this |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
567 entire history of your project. I have a small Java project handy, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
568 comprising a little over 300 source modules. There are 5 branches plus |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
569 the mainline, and some 1920 commits in all. A Subversion checkout of |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
570 the current mainline takes 51Mb. Converting the project to Mercurial |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
571 yields a Mercurial repository that takes 60Mb, so a little |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
572 bigger. Remember, though, that the Mercurial repository includes not |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
573 just the working copy, but also the entire history of the project. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
574 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
575 Any point in the evolution of a revlog can be uniquely identified with |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
576 a nodeid. This is simply the SHA1 hash of the current file contents |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
577 concatenated with the nodeids of one or both parents of the current |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
578 revision. Note that this way, two file states are identical if and |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
579 only if the file contents are the same *and* the file has the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
580 same history. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
581 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
582 Here's a dump of a revlog index: |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
583 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
584 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
585 $ hg debugindex .hg/store/data/pome.txt.i |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
586 rev offset length base linkrev nodeid p1 p2 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
587 0 0 32 0 0 6bbbd5d6cc53 000000000000 000000000000 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
588 1 32 51 0 1 83d266583303 6bbbd5d6cc53 000000000000 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
589 2 83 84 0 2 14a54ec34bb6 83d266583303 000000000000 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
590 3 167 76 3 4 dc4df776b38b 83d266583303 000000000000 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
591 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
592 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
593 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
594 Note here that a file state can have two parents. If both the parent |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
595 nodeids are non-null, the file state has two parents, and the state is |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
596 therefore the result of a merge. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
597 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
598 Let's dump out a revlog at a particular revision: |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
599 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
600 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
601 $ hg debugdata .hg/store/data/pome.txt.i 2 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
602 There was a gibbon one morning |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
603 said "I think I will fly to the moon". |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
604 So with two great palms strapped to his arms, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
605 he started his takeoff run. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
606 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
607 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
608 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
609 The next component is the manifest. This is simply a list of all the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
610 files in the project, together with their current nodeids. The |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
611 manifest is a file, held in a revlog. The nodeid of the manifest, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
612 therefore, identifies the project filesystem at a particular point. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
613 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
614 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
615 $ hg debugdata .hg/store/00manifest.i 5 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
616 poem.txt5168b1a5e2f44aa4e0f164e170820845183f50c8 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
617 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
618 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
619 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
620 Finally we have the changeset. This is the atomic collection of |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
621 changes to a repository that leads to a new revision. The changeset |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
622 info includes the nodeid of the corresponding manifest, the timestamp |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
623 and committer ID, a list of changed files and a comment. The changeset |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
624 also includes the nodeid of the parent changeset, or the two parents |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
625 if the change is a merge. The changeset description is held in a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
626 revlog, the changelog. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
627 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
628 \begin{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
629 $ hg debugdata .hg/store/00changelog.i 5 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
630 1ccc11b6f7308cc8fa1573c2f3811a4710c91e3e |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
631 Jim Hague <jim.hague@acm.org> |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
632 1209061793 -3600 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
633 poem.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
634 pome.txt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
635 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
636 Merge first line branch |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
637 $ |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
638 \end{verbatim} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
639 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
640 The nodeid of the changeset, therefore, gives us a globally unique |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
641 identifier for any particular change. Changesets have a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
642 Subversion-like incrementing change number, but it is peculiar to that |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
643 repository. The nodeid, however, is global. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
644 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
645 One more detail remains to complete the picture. How do we get back |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
646 from a particular file change to find the responsible changeset? Each |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
647 revlog change has a linkrev entry that does just this. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
648 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
649 So, now we have a repository with a history of the changes applied to |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
650 that repository. Each change has a unique identifier. If we find that |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
651 change in another repository, it means that at the point in the other |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
652 repository we have exactly the same state; the file contents and |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
653 history are identical. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
654 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
655 At this point we can see how pulling changes from another repository |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
656 works. Mercurial has to determine which changesets in the source |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
657 repository are missing in the target repository. To do this, for each |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
658 head in the source repo it has to find the most recent change in that |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
659 head that it already present in the target repo, and get any remaining |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
660 changes after that point. These changes are then copied over and |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
661 applied. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
662 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
663 The Mercurial revlog format has proved remarkably durable. Since the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
664 first release of Mercurial in April 2005, these have been a total of 5 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
665 changes to the file format. However, of those, all but one have been |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
666 changes to the handling of file names. The most recent change, in |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
667 October 2008, and its predecessor in December 2006, were both |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
668 introduced purely to cope with Windows specific issues. The one change |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
669 that touched the data structures described above was in April 2006. The |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
670 format introduced, RevLogNG, changed only the details of index data |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
671 held, not the overall design. The chief Mercurial developer, Matt |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
672 Mackall, notes that the code in present-day Mercurial devoted to |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
673 reading the old format comprises 28 lines of Python. Compared with, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
674 say, the early tribulations of Subversion and the switch from \texttt{bdfs} to |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
675 \texttt{fsfs}, this is an impressive record. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
676 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
677 \section{Reflections on going distributed} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
678 It's nearly traditional at this stage in an introduction to DVCS to |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
679 demonstrate several different workflow scenarios that you can build |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
680 with a DVCS. Which makes the important point that a DVCS can be |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
681 adapted to your workflow in a way that is at best unwieldy with a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
682 CVCS. I intend, though, to break with tradition here. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
683 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
684 By this stage, I hope you can see that distributing version control |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
685 works by introducing branches where development takes place in |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
686 parallel. Mercurial treats these branches as arising naturally from |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
687 the commits made and transferred between repositories. Both Git and |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
688 Bazaar take a slightly different viewpoint, and explicitly generate a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
689 fresh branch for work in a particular repositories. But in both cases |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
690 the underlying principle of identifying changes by a globally unique |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
691 identifier and resolving parallel development by merges between |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
692 overlapping changes is the same. And all three can be used in a truly |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
693 distributed manner, with full history and the ability to commit being |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
694 available locally. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
695 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
696 So instead of chatter on about workflows, I want instead to reflect on |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
697 the consequences all this has for that all-important question of |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
698 whether a DVCS is a suitable vehicle for your data. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
699 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
700 The first is a minor and rather obvious point. If you want to store |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
701 files that are very large and which change often in your DVCS, then |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
702 all the compression in the world is unlikely to stop the storage |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
703 requirements for the full project history from becoming uncomfortably |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
704 large, particularly if the files are not very compressible to start |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
705 with. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
706 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
707 The second, and main, point is that there is an important question you |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
708 need to ask about your data. We've seen that a DVCS relies on |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
709 branching and merging to weave its magic. So take a close look at your |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
710 data, and ask: |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
711 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
712 \standout{Will It Merge?} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
713 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
714 The subset of plain old text which comprises program source |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
715 code requires some human oversight, but will merge automatically |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
716 well enough for the process to be well within the bounds of the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
717 possible. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
718 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
719 Unfortunately when we move further afield mergeability becomes a rarer |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
720 commodity. I nearly began the previous paragraph by stating that |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
721 plain old text will merge well enough. Then Doubt set in~--- what about |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
722 XML? Or BASE64 encoded content? |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
723 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
724 Of course, merge doesn't necessarily have to be textual merge. I am |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
725 told that Word can be used to diff and merge two Word \texttt{.doc} files, a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
726 data format notorious for its binary impenetrability. As long as some |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
727 suitable merge agent is available, and the DVCS can be configured to |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
728 use it for data of a particular type\footnote{Mercurial can have the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
729 merge and diff tools specified with reference to the file extension on |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
730 which they operate~--- I assume Bazaar and Git are similar.}, then there |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
731 is no bar to successful DVCS use. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
732 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
733 Before this reliance on mergeability causes you to dismiss DVCS out of |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
734 hand, reflect. A CVCS can only handle non-mergeable data by acting as |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
735 a versioned file store; in other words, having as the only available |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
736 merge option the use of one or other of the merge candidates in its |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
737 entirety. Useful though a versioned file store can be, it cannot be |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
738 considered a full-featured version control system. By treating the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
739 offending unmergeable files as external to the DVCS, or with careful |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
740 workflow~--- disabling the distributed and mergeable potentials~--- a DVCS |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
741 can deal with these files, but only at a cost of its distributedness |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
742 or its version control system-ness. In this it differs little from a |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
743 CVCS. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
744 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
745 So, for all data you want to version control, let your battle cry be: |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
746 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
747 \standout{Will It Merge?} |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
748 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
749 At this point, I have an urge to don lab coat and safety goggles and |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
750 be videoed attempting to mechanically merge data in a variety of |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
751 different formats. Frankly, this is unlikely to be as exciting at |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
752 blending iPhones\footnote{\url{http://www.willitblend.com}}, |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
753 but from a system development point of view it's rather more |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
754 important. And, I think gives us a large clue as to one of the |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
755 reasons for the continuing |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
756 popularity of Plain Old Text as a source code representation mechanism. |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
757 |
2155510c62f3
A version formatted with Latex. And spellchecked.
Jim Hague <jim.hague@acm.org>
parents:
diff
changeset
|
758 \end{document} |