Mercurial > emacs
changeset 98767:abb63d1375ec
(File Names): Reorganize description.
(Visiting): Add xref to Mode Line. Copyedits.
(Save Commands): Mention prefix behavior of C-x C-s.
(Numbered Backups): Node deleted.
(Backup Names): Contents of Numbered Backups moved here. State default
of version-control variable.
(Reverting): Copyedits.
(Version Control): Add additional version control systems.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Wed, 15 Oct 2008 23:40:16 +0000 |
parents | 97ea34b8fed2 |
children | 234277f5b044 |
files | doc/emacs/files.texi |
diffstat | 1 files changed, 145 insertions(+), 136 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/emacs/files.texi Wed Oct 15 20:22:21 2008 +0000 +++ b/doc/emacs/files.texi Wed Oct 15 23:40:16 2008 +0000 @@ -1163,18 +1163,19 @@ @section Version Control @cindex version control - @dfn{Version control systems} are packages that can record multiple -versions of a source file, usually storing the unchanged parts of the -file just once. Version control systems also record history information -such as the creation time of each version, who created it, and a -description of what was changed in that version. + A @dfn{version control system} is a package that can record multiple +versions of a source file, storing information such as the creation +time of each version, who created it, and a description of what was +changed in that version. The Emacs version control interface is called VC. Its commands work -with different version control systems---currently, it supports CVS, -GNU Arch, RCS, Subversion, SCCS, Mercurial, Monotone, Bazaar, and Git. -Of these, the GNU project distributes CVS, GNU Arch, RCS, and Bazaar. - - VC is enabled by default in Emacs. To disable it, set the +with different version control systems; currently, it supports GNU +Arch, Bazaar, CVS, Git, Mercurial, Monotone, RCS, SCCS, and +Subversion. Of these, the GNU project distributes CVS, GNU Arch, RCS, +and Bazaar. + + VC is enabled automatically whenever you visit a file that is +governed by a version control system. To disable VC entirely, set the customizable variable @code{vc-handled-backends} to @code{nil} @iftex (@pxref{Customizing VC,,,emacs-xtra, Specialized Emacs Features}). @@ -1232,125 +1233,137 @@ reversibility, the ability to back up to a saved, known-good state when you discover that some modification you did was a mistake or a bad idea. - Version-control systems also support concurrency, the ability to + Version control systems also support concurrency: the ability to have many people modifying the same collection of code or documents knowing that conflicting modifications can be detected and resolved. - Version-control systems give you the capability to attach a history -to your data, explanatory comments about the intention behind each -change to it. Even for a programmer working solo change histories -are an important aid to memory; for a multi-person project they -become a vitally important form of communication among developers. + Version control systems give you the capability to attach a history +to your data, such as explanatory comments about the intention behind +each change to it. Even for a programmer working solo, change +histories are an important aid to memory; for a multi-person project, +they are a vitally important form of communication among developers. @node Version Control Systems @subsubsection Supported Version Control Systems @cindex back end (version control) VC currently works with many different version control systems or -``back ends'': SCCS, RCS, CVS, Subversion, GNU Arch, -git, and Mercurial. +``back ends'': @comment Omitting bzr because support is very scratchy and incomplete. + +@itemize @bullet + @cindex SCCS - SCCS was the first version-control system ever built, and was long ago +@item +SCCS was the first version control system ever built, and was long ago superseded by later and more advanced ones; Emacs supports it only for backward compatibility and historical reasons. VC compensates for -certain features missing in SCCS (tag names for releases, for example) by -implementing them itself. Some other VC features, such as multiple -branches, are not available with SCCS. Since SCCS is non-free you -should not use it; use its free replacement CSSC instead. But you -should use CSSC only if for some reason you cannot use a more -recent and better-designed version-control system. +certain features missing in SCCS (e.g., tag names for releases) by +implementing them itself. Other VC features, such as multiple +branches, are simply unavailable. Since SCCS is non-free, we +recommend avoiding it. + +@cindex CSSC +@item +CSSC is a free replacement for SCCS. You should use CSSC only if, for +some reason, you cannot use a more recent and better-designed +version-control system. @cindex RCS - RCS is the free version control system around which VC was initially -built. Almost everything you can do with RCS can be done through VC. You -cannot use RCS over the network, though, and it only works at the level -of individual files, rather than projects. You should use it if you -want a simple, yet reliable tool for handling individual files. +@item +RCS is the free version control system around which VC was initially +built. Almost everything you can do with RCS can be done through VC. +However, you cannot use RCS over the network, and it only works at the +level of individual files rather than projects. @cindex CVS - CVS is the free version control system that was until recently (as of -2007) used for the majority of free software projects, though it is now -being superseded by other systems. It allows concurrent -multi-user development either locally or over the network. Some of its -shortcomings, corrected by newer systems such as Subversion or GNU Arch, -are that it lacks atomic commits or support for renaming files. VC -supports all basic editing operations under CVS, but for some less -common tasks you still need to call CVS from the command line. Note -also that before using CVS you must set up a repository, which is a -subject too complex to treat here. +@item +CVS is the free version control system that was, until recently (circa +2008), used for the majority of free software projects. Nowadays, it +is slowly being superseded by other systems. CVS allows concurrent +multi-user development either locally or over the network. It lacks +support for atomic commits or file moving/renaming. VC supports all +basic editing operations under CVS. For some less common tasks, you +still need to call CVS from the command line. Note also that before +using CVS you must set up a repository, which is a subject too complex +to treat here. @cindex SVN @cindex Subversion - Subversion is a free version control system designed to be similar -to CVS but without CVS's problems, and is now (2007) rapidly -superseding CVS. Subversion supports atomic commits of filesets, and -versions directories, symbolic links, meta-data, renames, copies, and -deletes. It can be used via http or via its own protocol. +@item +Subversion (SVN) is a free version control system designed to be +similar to CVS but without its problems. It supports atomic commits +of filesets, and versioning of directories, symbolic links, meta-data, +renames, copies, and deletes. @cindex GNU Arch @cindex Arch - GNU Arch is a new version control system that is designed for -distributed work. It differs in many ways from old well-known -systems, such as CVS and RCS. It supports different transports for -interoperating between users, offline operations, and it has good -branching and merging features. It also supports atomic commits of -filesets, and keeps a history of file renaming and moving. VC +@item +GNU Arch is a version control system designed for distributed work. +It differs in many ways from older systems like CVS and RCS. It +provides different methods for interoperating between users, support +for offline operations, and good branching and merging features. It +also supports atomic commits of filesets and file moving/renaming. VC does not support all operations provided by GNU Arch, so you must -sometimes invoke it from the command line, or use a specialized -module. +sometimes invoke it from the command line. @cindex git - git is a version-control system invented by Linus Torvalds to -support Linux kernel development. Like GNU Arch, it supports atomic -commits of filesets, and keeps a history of file renaming and -moving. One significant feature of git is that it largely abolishes -the notion of a single centralized repository; instead, each working -copy of a git project is its own repository and coordination is done -through repository-sync operations. VC fully supports git, except -that it doesn't do news merges and repository sync operations must -be done from the command line. +@item +Git is a version control system invented by Linus Torvalds to support +Linux kernel development. It supports atomic commits of filesets and +file moving/renaming. One significant feature of git is that it +largely abolishes the notion of a single centralized repository; +instead, each working copy of a git project is its own repository and +coordination is done through repository-sync operations. VC supports +most git operations, with the exception of news merges and repository +syncing; these must be done from the command line. @cindex hg @cindex Mercurial - Mercurial is a distributed version-control systems broadly -resembling GNU Arch and git, with atomic fileset commits and -rename/move histories. Like git it is fully decentralized. -VC fully supports Mercurial, except for repository sync operations -which still need to be done from the command line. +@item +Mercurial (hg) is a distributed version control system broadly +resembling GNU Arch and git, with atomic fileset commits and file +moving/renaming. Like git, it is fully decentralized. VC supports +most Mercurial commands, with the exception of repository sync +operations; this needs to be done from the command line. + +@cindex bzr +@cindex Bazaar +@item +Bazaar (bzr) is a version control system that supports both +repository-based and distributed versioning, with atomic fileset +commits and file moving/renaming. VC supports most basic editing +operations under Bazaar. +@end itemize @node VCS Concepts @subsubsection Concepts of Version Control @cindex repository @cindex registered file - When a file is under version control, we also say that it is + When a file is under version control, we say that it is @dfn{registered} in the version control system. The system has a -@dfn{repository} which stores both the file's present state plus its +@dfn{repository} which stores both the file's present state and its change history---enough to reconstruct the current version or any -earlier version. The repository will also contain a @dfn{log entry} for -each change to the file, describing in words what was modified in that -revision. +earlier version. The repository also contains other information, such +as @dfn{log entries} that describe the changes made to each file. @cindex work file @cindex checking out files - A file checked out of a version-control repository is sometimes -called the @dfn{work file}. You edit the work file and make changes -in it, as you would with an ordinary file. After you are done with a -set of changes, you @dfn{check in} or @dfn{commit} the file, which -records the changes in the repository, along with a log entry for -them. + A file @dfn{checked out} of a repository is called the @dfn{work +file}. You edit the work file and make changes in it, as you would +with an ordinary file. After you are done with a set of changes, you +@dfn{check in} or @dfn{commit} the file; this records the changes in +the repository, along with a log entry for those changes. @cindex revision @cindex revision ID A copy of a file stored in a repository is called a @dfn{revision}. The history of a file is a sequence of revisions. Each revisions is -named by a @dfn{revision ID}. In older VCSes (such as SCCS and RCS), -the simplest kind of revision ID consisted of a @dfn{dot-pair}; -integers (the @dfn{major} and @dfn{minor} revisions) separated by a -dot. Newer VCSes tend to use @dfn{monotonic} revision IDs that are -simple integers counting from 1. +named by a @dfn{revision ID}. The format of the revision ID depends +on the version control system; in the simplest case, it is just an +integer. To go beyond these basic concepts, you will need to understand three ways in which version-control systems can differ from each other. They @@ -1361,24 +1374,24 @@ @cindex locking versus merging A version control system typically has some mechanism to coordinate -between users who want to change the same file. One method is -@dfn{locking} (analogous to the locking that Emacs uses to detect -simultaneous editing of a file, but distinct from it). In a locking -system, such as SCCS, you must @dfn{lock} a file before you start to -edit it. The other method is @dfn{merging}; the system tries to -merge your changes with other people's changes when you check them in. - - With version control locking, work files are normally read-only so -that you cannot change them. You ask the version control system to make -a work file writable for you by locking it; only one user can do -this at any given time. When you check in your changes, that unlocks -the file, making the work file read-only again. This allows other users -to lock the file to make further changes. - - By contrast, a merging system lets each user check out and modify a -work file at any time. When you check in a file, the system will -attempt to merge your changes with any others checked into the -repository since you checked out the file. +between users who want to change the same file. There are two ways to +do this: locking and merging. + + In a version control system that uses locking, work files are +normally read-only. To edit a file, you ask the version control +system to make it writable for you by @dfn{locking} it; only one user +can lock a given file at any given time. This procedure is analogous +to, but different from, the locking that Emacs uses to detect +simultaneous editing of ordinary files (@pxref{Interlocking}). When +you check in your changes, that unlocks the file, and the work file +becomes read-only again. Other users may then lock the file for +making their own changes. + + In a version control system that uses merging, each user may check +out and modify a work file at any time. The system allows you to +@dfn{merge} your work file, which may contain changes that have not +been checked in, with the latest changes that others have checked into +the repository. Both locking and merging systems can have problems when multiple users try to modify the same file at the same time. Locking systems have @@ -1392,46 +1405,42 @@ told to operate in a merging style. CVS and Subversion are merge-based by default but can be told to operate in a locking mode. Most later version-control systems, such as GNU Arch, git, and -Mercurial, have been based exclusively on merging rather than locking. -This is because experience has shown that the merging-based approach -is generally superior to the locking one, both in convenience to -developers and in minimizing the number and severity of conflicts that -actually occur. - - While it is rather unlikely that anyone will ever again build a -fundamentally locking-based rather than merging-based version-control -system in the future, merging-based version-systems sometimes have locks -retrofitted onto them for reasons having nothing to do with technology. -@footnote{Usually the control-freak instincts of managers.} For this -reason, and to support older systems still in use, VC mode supports -both locking and merging version control and tries to hide the differences -between them as much as possible. +Mercurial, are based exclusively on merging rather than locking. This +is because experience has shown that merging is generally superior to +locking, both in convenience to developers and in minimizing the +number and severity of conflicts that actually occur. Sometimes, +newer version control systems may have locks retrofitted onto them for +reasons having nothing to do with technology@footnote{Usually the +control-freak instincts of managers.}. + + VC mode supports both locking and merging version control and tries +to hide the differences between them as much as possible. @cindex files versus changesets. On SCCS, RCS, CVS, and other early version-control systems, checkins and other operations are @dfn{file-based}; each file has its own @dfn{master file} with its own comment and revision history separate from that of all other files in the system. Later systems, beginning -with Subversion, are @dfn{changeset-based}; a checkin under these -may include changes to several files and that change set is treated as -a unit by the system. Any comment associated with the change belongs -to no single file, but is attached to the changeset itself. - - Changeset-based version control is in general both more flexible and -more powerful than file-based version control; usually, when a change to +with Subversion, are @dfn{changeset-based}: a checkin may include +changes to several files, and the entire set of changes is treated as +a unit by the system. Any comment associated with the change does not +belong to a single file, but to the changeset itself. + + Changeset-based version control is generally more flexible and +powerful than file-based version control; usually, when a change to multiple files has to be backed out, it's good to be able to easily -identify and remove all of it. But it took some years for designers to -figure that out, and while file-based systems are passing out of use -there are lots of legacy repositories still to be dealt with at time of -writing in 2007. - - In fact, older versions of VC mode supported only file-based systems, -leading to some unhappy results when it was used to drive -changeset-based ones---the Subversion support, for example, used to break -up changesets into multiple per-file commits. This has been fixed, but -it has left a legacy in VC-mode's terminology. The terms ``checkin'' -and ``checkout'' are associated with file-based and locking-based -systems and a bit archaic; nowadays those operations are usually called +identify and remove all of it. But it took some years for designers +to figure that out, and while file-based systems are passing out of +use there are lots of legacy repositories still to be dealt with at +time of writing (2008). + + Older versions of VC supported only file-based systems, leading to +some unhappy results when it was used to drive changeset-based +ones---the Subversion support, for example, used to break up +changesets into multiple per-file commits. This has been fixed, but +it has left a legacy in VC's terminology. The terms ``checkin'' and +``checkout'' are associated with file-based and locking-based systems +and a bit archaic; nowadays those operations are usually called ``commit'' and ``update''. @cindex centralized vs. decentralized @@ -1443,8 +1452,8 @@ stops. The other is that you need to be connected live to the server to do checkins and checkouts; if you're offline, you can't work. - Newer version-control systems like GNU Arch, git, Mercurial, and Bzr -are @dfn{decentralized}. A project may have several different + Newer version-control systems like GNU Arch, git, Mercurial, and +Bazaar are @dfn{decentralized}. A project may have several different repositories, and these systems support a sort of super-merge between repositories that tries to reconcile their change histories. At the limit, each developer has his/her own repository, and repository