Mercurial > hgbook
view en/concepts.tex @ 95:47ea206351d5
Split tour into two sections.
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Fri, 13 Oct 2006 14:00:06 -0700 |
parents | b8539d91c84d |
children | e0b961975c5e |
line wrap: on
line source
\chapter{Basic Concepts} \label{chap:concepts} This chapter introduces some of the basic concepts behind distributed version control systems such as Mercurial. \section{Repository} \label{sec:concepts:repo} The repository is a directory where Mercurial stores the history for the files under revision control. \subsection{Where?} % where is this repository you speak of? XXX \subsection{How?} % How are the changes stored? XXX \subsection{Structure} \label{sec:concepts:structure} % What's the structure of the repository? A typical Mercurial repository is a directory which contains a checked out working copy (see section~\ref{sec:concepts:workingcopy}) as well as \sdirname{.hg} directory. Figure~\ref{ex:concepts:dirlist} shows the contents of a freshly created repository. This repository does not contain any revisions. Let's take a look at a repository that has history for several files. Figure~\ref{ex:concepts:dirlist2} shows the contents of a repository keeping history on two files. We see the checked out copies of the files \filename{foo} and \filename{bar}, as well as the files containing their histories \filename{foo.i} and \filename{bar.i}, respectively. Additionally, we see the \filename{changelog.i} and \filename{00manifest.i} files. These contain the repository-wide revision data, such as the commit message, and the list of files in the repository during the commit. \begin{figure}[ht] \interaction{concepts.dirlist} \caption{Contents of a freshly created repository} \label{ex:concepts:dirlist} \end{figure} \begin{figure}[ht] \interaction{concepts.dirlist2} \caption{Contents of a repository tracking two files} \label{ex:concepts:dirlist2} \end{figure} \subsection{hgrc} % .hg/hgrc XXX \subsection{Creating a Repository} % hg init Creating a repository is quick and painless. One uses the \hgcmd{init} command as figure~\ref{ex:concepts:hginit} demonstrates. The one argument passed to the \hgcmd{init} command is the name of the repository. The name can be any string usable as a directory name. \begin{caution} If you do not specify a name of the repository, the current working directory will be used instead. \end{caution} \begin{figure}[ht] \interaction{concepts.hginit} \caption{Creating a new repository} \label{ex:concepts:hginit} \end{figure} \subsection{Remote Repositories} \label{sec:concepts:remoterepo} In addition to repositories stored on the local file system, Mercurial supports so called \emph{remote repositories}. These remote repositories can be accessed via several different methods. See section~\ref{sec:XXX:remotesetup} for instructions how to set up remote repositories. % XXX: reference the proper section! \subsubsection{SSH} \label{sec:concepts:remoterepo:ssh} Mercurial can use \command{ssh} to send and receive changes. The remote repository is identified by an URL. The basic format for the URL is: \begin{verbatim} ssh://[user@]host/path \end{verbatim} Where \cmdargs{user} is optional, and the \cmdargs{path} is path to the repository --- either an absolute or relative to the user's home directory --- on the remote host with hostname: \cmdargs{host}. \begin{note} If the path for the remote repository is absolute there will be two consecutive slashes. E.g., if the remote path is \dirname{/repos/hgbook}, the URL would look something like the following: \begin{verbatim} ssh://someuser@remotebox//repos/hgbook \end{verbatim} Relative paths have only one slash and are relative to the user's home directory. \end{note} \subsubsection{HTTP \& HTTPS} \label{sec:concepts:remoterepo:http} The other protocol supported is HTTP as well as HTTPS. The repository URL is very much like that of the \command{ssh}. \begin{verbatim} http://[user@]remotebox/path \end{verbatim} Just as before, the username is optional. % XXX: is it optional for both push & pull or just for pull? This time however, the path is relative to the HTTP server root. \section{Working Copy} \label{sec:concepts:workingcopy} XXX \section{Revisions} \label{sec:concepts:revs} XXX %%% Local Variables: %%% mode: latex %%% TeX-master: "00book" %%% End: