annotate en/concepts.tex @ 56:b8539d91c84d

Begining of concepts chapter
author Josef "Jeff" Sipek <jeffpc@josefsipek.net>
date Mon, 24 Jul 2006 23:57:52 -0400
parents
children e0b961975c5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
56
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
1 \chapter{Basic Concepts}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
2 \label{chap:concepts}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
3
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
4 This chapter introduces some of the basic concepts behind distributed
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
5 version control systems such as Mercurial.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
6
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
7 \section{Repository}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
8 \label{sec:concepts:repo}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
9 The repository is a directory where Mercurial stores the history for the
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
10 files under revision control.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
11
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
12 \subsection{Where?}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
13 % where is this repository you speak of?
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
14 XXX
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
15
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
16 \subsection{How?}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
17 % How are the changes stored?
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
18 XXX
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
19
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
20 \subsection{Structure}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
21 \label{sec:concepts:structure}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
22 % What's the structure of the repository?
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
23 A typical Mercurial repository is a directory which contains a checked out
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
24 working copy (see section~\ref{sec:concepts:workingcopy}) as well as
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
25 \sdirname{.hg} directory. Figure~\ref{ex:concepts:dirlist} shows the
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
26 contents of a freshly created repository. This repository does not contain
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
27 any revisions. Let's take a look at a repository that has history for
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
28 several files.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
29 Figure~\ref{ex:concepts:dirlist2} shows the contents of a repository keeping
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
30 history on two files. We see the checked out copies of the files
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
31 \filename{foo} and \filename{bar}, as well as the files containing their
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
32 histories \filename{foo.i} and \filename{bar.i}, respectively. Additionally,
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
33 we see the \filename{changelog.i} and \filename{00manifest.i} files. These
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
34 contain the repository-wide revision data, such as the commit message, and
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
35 the list of files in the repository during the commit.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
36
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
37 \begin{figure}[ht]
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
38 \interaction{concepts.dirlist}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
39 \caption{Contents of a freshly created repository}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
40 \label{ex:concepts:dirlist}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
41 \end{figure}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
42
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
43 \begin{figure}[ht]
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
44 \interaction{concepts.dirlist2}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
45 \caption{Contents of a repository tracking two files}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
46 \label{ex:concepts:dirlist2}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
47 \end{figure}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
48
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
49 \subsection{hgrc}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
50 % .hg/hgrc
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
51 XXX
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
52
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
53 \subsection{Creating a Repository}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
54 % hg init
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
55 Creating a repository is quick and painless. One uses the \hgcmd{init}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
56 command as figure~\ref{ex:concepts:hginit} demonstrates. The one argument
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
57 passed to the \hgcmd{init} command is the name of the repository. The name
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
58 can be any string usable as a directory name.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
59
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
60 \begin{caution}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
61 If you do not specify a name of the repository, the current working
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
62 directory will be used instead.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
63 \end{caution}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
64
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
65 \begin{figure}[ht]
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
66 \interaction{concepts.hginit}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
67 \caption{Creating a new repository}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
68 \label{ex:concepts:hginit}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
69 \end{figure}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
70
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
71 \subsection{Remote Repositories}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
72 \label{sec:concepts:remoterepo}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
73 In addition to repositories stored on the local file system, Mercurial
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
74 supports so called \emph{remote repositories}. These remote repositories
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
75 can be accessed via several different methods. See
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
76 section~\ref{sec:XXX:remotesetup} for instructions how to set up remote
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
77 repositories.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
78 % XXX: reference the proper section!
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
79
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
80 \subsubsection{SSH}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
81 \label{sec:concepts:remoterepo:ssh}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
82 Mercurial can use \command{ssh} to send and receive changes. The remote
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
83 repository is identified by an URL. The basic format for the URL is:
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
84
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
85 \begin{verbatim}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
86 ssh://[user@]host/path
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
87 \end{verbatim}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
88
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
89 Where \cmdargs{user} is optional, and the \cmdargs{path} is path to the
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
90 repository --- either an absolute or relative to the user's home directory
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
91 --- on the remote host with hostname: \cmdargs{host}.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
92
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
93 \begin{note}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
94 If the path for the remote repository is absolute there will be two
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
95 consecutive slashes. E.g., if the remote path is \dirname{/repos/hgbook},
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
96 the URL would look something like the following:
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
97
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
98 \begin{verbatim}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
99 ssh://someuser@remotebox//repos/hgbook
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
100 \end{verbatim}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
101
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
102 Relative paths have only one slash and are relative to the user's home
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
103 directory.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
104 \end{note}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
105
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
106 \subsubsection{HTTP \& HTTPS}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
107 \label{sec:concepts:remoterepo:http}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
108 The other protocol supported is HTTP as well as HTTPS. The repository URL
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
109 is very much like that of the \command{ssh}.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
110
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
111 \begin{verbatim}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
112 http://[user@]remotebox/path
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
113 \end{verbatim}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
114
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
115 Just as before, the username is optional.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
116 % XXX: is it optional for both push & pull or just for pull?
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
117 This time however, the path is relative to the HTTP server root.
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
118
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
119 \section{Working Copy}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
120 \label{sec:concepts:workingcopy}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
121 XXX
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
122
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
123 \section{Revisions}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
124 \label{sec:concepts:revs}
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
125 XXX
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
126
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
127 %%% Local Variables:
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
128 %%% mode: latex
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
129 %%% TeX-master: "00book"
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
130 %%% End:
b8539d91c84d Begining of concepts chapter
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
131