
bos@16: \chapter{Introduction}
bos@16: \label{chap:intro}
bos@16: 
bos@217: \section{About revision control}
bos@155: 
bos@217: Revision control is the management of multiple versions of a piece of
bos@217: information.  In its simplest form, it's a process that many people
bos@217: perform by hand: every time you modify a file, save it under a new
bos@217: name that contains a number, each one higher than the number of the
bos@217: preceding version.
bos@217: 
bos@217: Manually managing multiple versions of even a single file is an
bos@217: error-prone task, though, so software tools to help automate this
bos@217: process have long been available.  The earliest automated revision
bos@217: control tools were intended to help a single user to manage revisions
bos@217: to a single file.  Over the past several decades, the scope of
bos@217: revision control tools has expanded greatly; they now manage multiple
bos@217: files, and help multiple people to work together.  The best modern
bos@217: revision control tools will have no problem coping with thousands of
bos@217: people working together on a single project, which might consist of
bos@217: hundreds of thousands of files.
bos@217: 
bos@217: \subsection{Why use revision control?}
bos@217: 
bos@217: There are a number of reasons why you or your team might want to use
bos@217: an automated revision control tool for a project.
bos@217: \begin{itemize}
bos@217: \item The software gives you a unified way of working with your
bos@217:   project's files, and a single place to look in.
bos@217: \item When you're working with other people, it will make it easier
bos@217:   for you to collaborate.  When people more or less simultaneously
bos@217:   make potentially incompatible changes, the software will help you to
bos@217:   identify and resolve those conflicts.
bos@217: \item It will track the history of your project.  For every change,
bos@217:   you'll have a log of \emph{who} made it; \emph{why} they made it;
bos@217:   \emph{when} they made it; and \emph{what} the change was.
bos@217: \item It can help you to recover from mistakes.  If you make a change
bos@217:   that later turns out to be in error, you can revert to an earlier
bos@217:   version of one or more files.  In fact, a \emph{really} good
bos@217:   revision control tool will even help you to efficiently figure out
bos@217:   exactly when a problem was introduced (see
bos@217:   section~\ref{sec:undo:bisect} for details).
bos@217: \item It will help you to work simultaneously on multiple versions of
bos@217:   your project.
bos@217: \end{itemize}
bos@217: 
bos@217: \subsection{The many names of revision control}
bos@217: 
bos@217: Revision control is a diverse field, so much so that it doesn't
bos@217: actually have a single name or acronym.  Here are a few of the more
bos@217: common names and acronyms you'll encounter:
bos@217: \begin{itemize}
bos@217: \item Configuration management (CM)
bos@217: \item Revision control (RCS)
bos@217: \item Software configuration management (SCM)
bos@217: \item Version control (VCS)
bos@217: \end{itemize}
bos@217: Some people claim that these terms actually have different meanings,
bos@217: but in practice they overlap so much that there's no agreed or even
bos@217: useful way to tease them apart.
bos@155: 
bos@155: \section{The hierarchy of revision control}
bos@155: 
bos@155: 
bos@155: \subsection{On a single system}
bos@155: 
bos@155: \subsection{Network-based, but centralised}
bos@155: 
bos@155: \subsection{Fully distributed}
bos@155: 
bos@155: 
bos@155: \section{Advantages of distributed revision control}
bos@155: 
bos@155: \subsection{For open source projects}
bos@155: 
bos@155: \subsection{For commercial projects}
bos@155: 
bos@155: \subsection{Myths about distributed revision control}
bos@155: 
bos@155: \section{Why choose Mercurial?}
bos@155: 
bos@16: 
bos@16: %%% Local Variables: 
bos@16: %%% mode: latex
bos@16: %%% TeX-master: "00book"
bos@16: %%% End: 




