Mercurial > emacs
changeset 99299:8460775a4023
(Types of Log File): Change logs are older than version control.
(VCS Concepts): Simplify and rearrange.
(Version Control Systems): Make it clear that Linux is only the kernel.
(VC Mode Line): Shorten reference to menu item.
(Basic VC Editing): Clarify VC fileset. Shorten and simplify.
(VC Directory Mode): Minor cleanup.
Unchanged files are hidden, not omitted.
(VC Directory Commands): Shorten and simplify.
(Change Log Commands): New node, split from Change Logs.
(VC Directory Buffer): New node, split from VC Directory Mode.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 01 Nov 2008 01:58:13 +0000 |
parents | 225286546090 |
children | bc68f6c19bb9 |
files | doc/emacs/maintaining.texi |
diffstat | 1 files changed, 75 insertions(+), 94 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/emacs/maintaining.texi Sat Nov 01 01:24:33 2008 +0000 +++ b/doc/emacs/maintaining.texi Sat Nov 01 01:58:13 2008 +0000 @@ -170,7 +170,7 @@ @cindex git @item Git is a distributed version control system invented by Linus Torvalds to support -Linux kernel development. It supports atomic commits of filesets and +development of Linux (his kernel). 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 @@ -229,11 +229,10 @@ integer. To go beyond these basic concepts, you will need to understand three -ways in which version control systems can differ from each other. +aspects in which version control systems differ. They can be locking-based or merging-based; they can be file-based or changeset-based; and they can be centralized or decentralized. VC -handles all these choices, but they lead to differing behaviors which -you will need to understand as you use it. +handles all these modes of operation, but it cannot hide the differences. @cindex locking versus merging A version control system typically has some mechanism to coordinate @@ -263,21 +262,21 @@ conflicts} happen when you check in a change to a file that conflicts with a change checked in by someone else after your checkout. Both kinds of conflict have to be resolved by human judgment and -communication. +communication. Experience has shown that merging is superior to +locking, both in convenience to developers and in minimizing the +number and severity of conflicts that actually occur. SCCS always uses locking. RCS is lock-based by default but can be 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. Distributed version control systems, such as GNU Arch, git, and -Mercurial, are exclusively merging-based. Experience has shown that -merging is superior to locking, both in convenience to developers and -in minimizing the number and severity of conflicts that actually -occur. Sometimes, however, 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.}. +Mercurial, are exclusively merging-based. - VC mode supports both locking and merging version control and tries -to hide the differences between them as much as possible. + VC mode supports both locking and merging version control. The +terms ``checkin'' and ``checkout'' come from locking-based version +control systems; newer version control systems have slightly different +operations usually called ``commit'' and ``update'', but VC hides the +differences between them as much as possible. @cindex files versus changesets. On SCCS, RCS, CVS, and other early version control systems, version @@ -292,33 +291,21 @@ Changeset-based version control is more flexible and powerful than file-based version control; usually, when a change to multiple files has to be reversed, 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 as of this writing (2008). - - Prior to Emacs 23, VC supported only file-based systems, leading to -unhappy results when it was used to drive changeset-based -systems---the Subversion support, for example, used to break up -changesets into multiple per-file commits. This has been fixed, but -it has left a mark 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''. +all of it. @cindex centralized vs. decentralized version control Early version control systems were designed around a @dfn{centralized} model in which each project has only one repository used by all developers. SCCS, RCS, CVS, and Subversion share this -kind of model. One problem with this approach is that a single -repository is a single point of failure---if the repository server is -down, all work stops. +kind of model. One of its drawbacks is that the repository is a choke +point for reliability and efficiency. - 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 -merges replace checkin/commit operations. + GNU Arch pioneered the concept of @dfn{decentralized} version +control, later implemented in git, Mercurial, and Bazaar. 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 merges replace checkin/commit operations. VC's job is to help you manage the traffic between your personal workfiles and a repository. Whether that repository is a single @@ -343,20 +330,14 @@ portion of a program---typically one directory and its subdirectories. A small program would use one @file{ChangeLog} file; a large program may have a @file{ChangeLog} file in each major directory. -@xref{Change Log}. +@xref{Change Log}. Programmers have used change logs since long +before version control systems. - Actually, the fact that both kinds of log exist is partly a legacy -from file-based version control. Changelogs are a GNU convention, -later more widely adopted, that help developers to get a -changeset-based view of a project even when its version control system -has that information split up in multiple file-based logs. - - Changeset-based version systems, on the other hand, often maintain a -changeset-based modification log for the entire system that makes -ChangeLogs somewhat redundant. One advantage that ChangeLogs retain -is that it is sometimes useful to be able to view the transaction -history of a single directory separately from those of other -directories. + Changeset-based version systems typically maintain a changeset-based +modification log for the entire system, which makes change log files +somewhat redundant. One advantage that they retain is that it is +sometimes useful to be able to view the transaction history of a +single directory separately from those of other directories. A project maintained with version control can use just the version control log, or it can use both kinds of logs. It can handle some @@ -395,8 +376,7 @@ indicator to pop up a ``tool-tip'', which displays a more verbose description of the version control status. Pressing @kbd{Mouse-1} over the indicator pops up a menu of VC commands. This menu is -identical to the @samp{Version Control} menu item, which can be found -in the @samp{Tools} menu on the menu bar. +identical to the @samp{Tools / Version Control} menu item. @vindex auto-revert-check-vc-info When Auto Revert mode (@pxref{Reverting}) reverts a buffer that is @@ -413,25 +393,23 @@ @node Basic VC Editing @subsection Basic Editing under Version Control -@cindex filesets +@cindex filesets, VC Most VC commands operate on @dfn{VC filesets}. A VC fileset is a -group of one or more files that are treated as a unit, for the -purposes of version control. - - If you are visiting a version-controlled file in the current -buffer, the VC fileset is simply that one file. If you are visiting a -VC directory buffer, and some files in it are marked, the VC fileset +collection of one or more files that a VC operation acts on. When you +type VC commands in a buffer visiting a version-controlled file, the +VC fileset is simply that one file. When you type them in a VC +Directory buffer, and some files in it are marked, the VC fileset consists of the marked files (@pxref{VC Directory Mode}). The principal VC command is an all-purpose command, @kbd{C-x v v} (@code{vc-next-action}), that performs either locking, merging or a -check-in on the current VC fileset, depending on the situation. You -can call @kbd{C-x v v} from a version-controlled file, or from the VC -Directory buffer. +check-in (depending on the situation) on the current VC fileset. You +can use @kbd{C-x v v} in a file-visiting buffer or in a VC Directory +buffer. @table @kbd @itemx C-x v v -Perform the next logical version control operation on the VC fileset. +Perform the appropriate next version control operation on the VC fileset. @end table @findex vc-next-action @@ -450,15 +428,11 @@ version control system; if they are not, Emacs signals an error when you attempt to execute a command on the fileset. - If you are accustomed to previous versions of VC, most of the -changes to VC in Emacs 23 are found in VC directory mode (@pxref{VC -Directory Mode}). When multiple files are marked in the VC directory -buffer, they are treated as a VC fileset; typing @kbd{C-x v v} in the -VC directory buffer passes them to the version control backends as a -single unit. Other commands in VC directory mode now act on the VC -fileset, rather than the file on the current line. These changes -allow VC to interoperate correctly with changeset-based version -control systems. + Support for VC filesets and changeset-based version control systems +is the main improvement to VC in Emacs 23. When you mark multi-file +VC in a VC Directory buffer, VC operations treat them as a VC fileset, +and operate on them all at once if the version control system is +changeset-based. @xref{VC Directory Mode} VC filesets are distinct from the ``named filesets'' used for viewing and visiting files in functional groups (@pxref{Filesets}). @@ -1001,19 +975,26 @@ @cindex PCL-CVS @pindex cvs @cindex CVS directory mode - The VC Directory buffer described here works with all the version -control systems that VC supports. Another more powerful facility, -designed specifically for CVS, is called PCL-CVS. @xref{Top, , About -PCL-CVS, pcl-cvs, PCL-CVS --- The Emacs Front-End to CVS}. + The VC Directory buffer works with all the version control systems +that VC supports. For CVS, Emacs also offers a more powerful facility +called PCL-CVS. @xref{Top, , About PCL-CVS, pcl-cvs, PCL-CVS --- The +Emacs Front-End to CVS}. + +@menu +* Buffer: VC Directory Buffer. What the buffer looks like and means. +* Commands: VC Directory Commands. Commands to use in a VC directory buffer. +@end menu + +@node VC Directory Buffer +@subsubsection The VC Directory Buffer The VC Directory buffer contains a list of version-controlled files in the current directory and its subdirectories. Files which are up-to-date (have no local differences from the repository copy) are -omitted; if all files in a directory are up-to-date, the directory is -omitted as well. (However, the directory in which @code{vc-dir} was -run will always be shown as @file{./}.) There is an exception to this -rule: if VC mode detects that a file has changed to an up-to-date -state since you last looked at it, that file and its state are shown. +usually hidden; if all files in a subdirectory are up-to-date, the +subdirectory is hidden as well. There is an exception to this rule: +if VC mode detects that a file has changed to an up-to-date state +since you last looked at it, that file and its state are shown. If a directory uses more that one version control system, you can select which system to use for the @code{vc-dir} command by invoking @@ -1043,7 +1024,7 @@ @vindex vc-cvs-stay-local In the above, if the repository were on a remote machine, VC only contacts it when the variable @code{vc-stay-local} (or -@code{vc-cvs-stay-local}) is nil (@pxref{CVS Options}). This is +@code{vc-cvs-stay-local}) is @code{nil} (@pxref{CVS Options}). This is because access to the repository may be slow, or you may be working offline and not have access to the repository at all. As a consequence, VC would not be able to tell you that @samp{file3.c} is @@ -1064,10 +1045,6 @@ @samp{CVS}; you can customize this by setting the variable @code{vc-directory-exclusion-list}. -@menu -* VC Directory Commands:: Commands to use in a VC directory buffer. -@end menu - @node VC Directory Commands @subsubsection VC Directory Commands @@ -1134,12 +1111,12 @@ changesets, @kbd{C-x v v} with a selected set of modified but not committed files will commit all of them at once as a single changeset. - When @kbd{C-x v v} (@code{vc-next-action}) operates on a set of files, -it requires that all of those files must be either in the same state or -in compatible states; otherwise it will throw an error (added, -modified and removed states are considered compatible). Note that this -differs from the behavior of older versions of VC, which did not have -fileset operations and simply did @code{vc-next-action} on each file + When @kbd{C-x v v} (@code{vc-next-action}) operates on multiple +files, all of those files must be either in the same state or in +compatible states (added, modified and removed states are considered +compatible). Otherwise it signals an error. This differs from the +behavior of older versions of VC, which did not have fileset +operations and simply did @code{vc-next-action} on each file individually. If any files are in a state that calls for commit, @kbd{C-x v v} reads a @@ -1365,6 +1342,7 @@ @node Change Log @section Change Logs +@cindex change log A change log file contains a chronological record of when and why you have changed a program, consisting of a sequence of entries describing individual changes. Normally it is kept in a file called @@ -1373,7 +1351,14 @@ record changes for all the files in its directory and all its subdirectories. -@cindex change log +@menu +* Change Log Commands:: Commands for editing change log files. +* Format of ChangeLog:: What the change log file looks like. +@end menu + +@node Change Log Commands +@subsection Change Log Commands + @kindex C-x 4 a @findex add-change-log-entry-other-window The Emacs command @kbd{C-x 4 a} adds a new entry to the change log @@ -1440,10 +1425,6 @@ (@pxref{Change Logs and VC}). @end ifnottex -@menu -* Format of ChangeLog:: What the change log file looks like. -@end menu - @node Format of ChangeLog @subsection Format of ChangeLog