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: