1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-30 04:10:54 -08:00

More updates for VC documentation.

* doc/emacs/maintaining.texi (VCS Merging, VCS Changesets): Index entries.
(VC Mode Line): Add index entry for "version control status".
(VC Undo): Use vc-revert instead of its vc-revert-buffer alias.
Document vc-revert-show-diff.  De-document vc-rollback.
(VC Directory Mode): Rewrite introduction.  Move prefix arg
documentation here from VC Directory Buffer node.
(VC Directory Buffer): Use a decentralized VCS example.
(VC Directory Commands): Use a table.  Remove material duplicated
in previous nodes on multi-file VC filsets.
This commit is contained in:
Chong Yidong 2011-12-19 15:25:46 +08:00
parent a6198c9097
commit bc859d5f3e
4 changed files with 231 additions and 192 deletions

View file

@ -61,13 +61,6 @@ sk Miroslav Vaško
* BUGS
** Does deleting frames run Lisp code? If so, can we get rid of that?
It is a dangerous design.
http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg01330.html
** Why were the calls to x_fully_uncatch_errors commented out in eval.c?
http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg01987.html
** rms: gnus-dired.el is a mistake. Those features should not
be part of Gnus. They should be moved to some other part of Emacs.
rsteib: Gnus dependencies in `gnus-dired.el' (and `mailcap.el') have been
@ -90,25 +83,8 @@ and change key bindings where necessary. The current list of modes:
`log-edit-comment-search-forward'. Perhaps search commands
on the global key binding `M-s' are useless in these modes.
** sdl.web@gmail.com, 30 Oct: ps-lpr-switches has no effect
http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg02091.html
Fixed by this change?
2007-11-09 Vinicius Jose Latorre <viniciusjl@ig.com.br>
* ps-print.el: [...]
(ps-do-despool): If ps-lpr-switches is not a list, force it to be one.
** In C, use EMACS_INT for variables and structure members
for buffer/string positions. E.g. struct it, struct text_pos.
* DOCUMENTATION
** Clean up Emacs.app references in code and documentation.
** Document new font backend
** Document XEmbed support
** Check the Emacs Tutorial.
@ -154,7 +130,7 @@ anti.texi
arevert-xtra.texi cyd
basic.texi cyd
buffers.texi cyd
building.texi
building.texi cyd
calendar.texi
cal-xtra.texi
cmdargs.texi
@ -188,13 +164,13 @@ msdog-xtra.texi
mule.texi
m-x.texi cyd
picture-xtra.texi
programs.texi
programs.texi cyd
regs.texi cyd
rmail.texi
screen.texi cyd
search.texi cyd
sending.texi
text.texi
text.texi cyd
trouble.texi
vc-xtra.texi
vc1-xtra.texi

View file

@ -1,3 +1,15 @@
2011-12-19 Chong Yidong <cyd@gnu.org>
* maintaining.texi (VCS Merging, VCS Changesets): Index entries.
(VC Mode Line): Add index entry for "version control status".
(VC Undo): Use vc-revert instead of its vc-revert-buffer alias.
Document vc-revert-show-diff. De-document vc-rollback.
(VC Directory Mode): Rewrite introduction. Move prefix arg
documentation here from VC Directory Buffer node.
(VC Directory Buffer): Use a decentralized VCS example.
(VC Directory Commands): Use a table. Remove material duplicated
in previous nodes on multi-file VC filsets.
2011-12-17 Chong Yidong <cyd@gnu.org>
* maintaining.texi (VCS Concepts): Make "revision" terminology

View file

@ -227,17 +227,18 @@ these modes of operation, but it cannot hide the differences.
@node VCS Merging
@subsubsection Merge-based vs lock-based Version Control
@cindex locking versus merging
A version control system typically has some mechanism to coordinate
between users who want to change the same file. There are two ways to
do this: merging and locking.
@cindex merging-based version
In a version control system that uses merging, each user may modify
a work file at any time. The system lets you @dfn{merge} your work
file, which may contain changes that have not been committed, with the
latest changes that others have committed.
@cindex locking-based version
Older version control systems use a @dfn{locking} scheme instead.
Here, 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}
@ -274,7 +275,7 @@ possible.
@node VCS Changesets
@subsubsection Changeset-based vs File-based Version Control
@cindex changesets
@cindex file-based version control
On SCCS, RCS, CVS, and other early version control systems, version
control operations are @dfn{file-based}: each file has its own comment
and revision history separate from that of all other files. Newer
@ -283,6 +284,7 @@ commit may include changes to several files, and the entire set of
changes is handled as a unit. Any comment associated with the change
does not belong to a single file, but to the changeset itself.
@cindex changeset-based version control
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
@ -356,20 +358,22 @@ later use the @kbd{C-x v a} command to copy it to @file{ChangeLog}
@node VC Mode Line
@subsection Version Control and the Mode Line
@cindex VC, mode line indicator
@cindex VC mode line indicator
When you visit a file that is under version control, Emacs indicates
this on the mode line. For example, @samp{Bzr-1223} says that Bazaar
is used for that file, and the current revision ID is 1223.
@cindex version control status
The character between the back-end name and the revision ID
indicates the status of the work file. In a merge-based version
control system, a @samp{-} character indicates that the work file is
unmodified, and @samp{:} indicates that it has been modified.
@samp{!} indicates that the file contains conflicts as result of a
recent merge operation (@pxref{Merging}), or that the file was removed
from the version control. Finally, @samp{?} means that the file is
under version control, but is missing from the working tree.
indicates the @dfn{version control status} of the work file. In a
merge-based version control system, a @samp{-} character indicates
that the work file is unmodified, and @samp{:} indicates that it has
been modified. @samp{!} indicates that the file contains conflicts as
result of a recent merge operation (@pxref{Merging}), or that the file
was removed from the version control. Finally, @samp{?} means that
the file is under version control, but is missing from the working
tree.
In a lock-based system, @samp{-} indicates an unlocked file, and
@samp{:} a locked file; if the file is locked by another user (for
@ -399,6 +403,7 @@ system, but is usually not excessive.
@subsection Basic Editing under Version Control
@cindex filesets, VC
@cindex VC filesets
Most VC commands operate on @dfn{VC filesets}. A VC fileset is a
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
@ -451,9 +456,9 @@ and don't persist across sessions.
@itemize @bullet
@item
If there is more than one file in the VC fileset and the files have
inconsistent version control states, signal an error. (Note, however,
that a fileset is allowed to include both ``newly-added'' files and
``modified'' files; @pxref{Registering}.)
inconsistent version control statuses, signal an error. (Note,
however, that a fileset is allowed to include both ``newly-added''
files and ``modified'' files; @pxref{Registering}.)
@item
If none of the files in the VC fileset are registered with a version
@ -504,7 +509,7 @@ its default mode), @kbd{C-x v v} does the following:
@itemize @bullet
@item
If there is more than one file in the VC fileset and the files have
inconsistent version control states, signal an error.
inconsistent version control statuses, signal an error.
@item
If each file in the VC fileset is not registered with a version
@ -887,7 +892,7 @@ the file contents without distraction from the annotations.
@table @kbd
@item C-x v l
Display revision control state and change history
Display the change history for the current fileset
(@code{vc-print-log}).
@item C-x v L
@ -927,8 +932,8 @@ this feature). With a prefix argument, the command prompts for the
maximum number of revisions to display.
The @kbd{C-x v L} history is shown in a compact form, usually
omitting all but the first line of each log entry. However, you can
type @key{RET} (@code{log-view-toggle-entry-display}) in the
showing only the first line of each log entry. However, you can type
@key{RET} (@code{log-view-toggle-entry-display}) in the
@samp{*vc-change-log*} buffer to reveal the entire log entry for the
revision at point. A second @key{RET} hides it again.
@ -1008,58 +1013,67 @@ buffer. However, RCS, SCCS, and CVS do not support this feature.
@table @kbd
@item C-x v u
Revert the buffer and the file to the working revision from which you started
editing the file.
@item C-x v c
Remove the last-entered change from the master for the visited file.
This undoes your last commit.
Revert the work file(s) in the current VC fileset to the last revision
(@code{vc-revert}).
@end table
@c `C-x v c' (vc-rollback) was removed, since it's RCS/SCCS specific.
@kindex C-x v u
@findex vc-revert-buffer
If you want to discard your current set of changes and revert to the
working revision from which you started editing the file, use @kbd{C-x
v u} (@code{vc-revert-buffer}). If the version control system is
locking-based, this leaves the file unlocked, and you must lock it
again before making new changes. @kbd{C-x v u} requires confirmation,
unless it sees that you haven't made any changes with respect to the
master copy of the working revision.
@findex vc-revert
@vindex vc-revert-show-diff
If you want to discard all the changes you have made to the current
VC fileset, type @kbd{C-x v u} (@code{vc-revert-buffer}). This shows
you a diff between the work file(s) and the revision from which you
started editing, and asks for confirmation for discarding the changes.
If you agree, the fileset is reverted. If you don't want @kbd{C-x v
u} to show a diff, set the variable @code{vc-revert-show-diff} to
@code{nil} (you can still view the diff directly with @kbd{C-x v =};
@pxref{Old Revisions}). Note that @kbd{C-x v u} cannot be reversed
with the usual undo commands (@pxref{Undo}), so use it with care.
@kbd{C-x v u} is also the command to unlock a file if you lock it and
then decide not to change it.
@kindex C-x v c
@findex vc-rollback
To cancel a change that you already committed, use @kbd{C-x v c}
(@code{vc-rollback}). This command discards all record of the most
recent checked-in revision, but only if your work file corresponds to
that revision---you cannot use @kbd{C-x v c} to cancel a revision that
is not the latest on its branch. Note that many version control
systems do not support rollback at all; this command is something of a
historical relic.
On locking-based version control systems, @kbd{C-x v u} leaves files
unlocked; you must lock again to resume editing. You can also use
@kbd{C-x v u} to unlock a file if you lock it and then decide not to
change it.
@node VC Directory Mode
@subsection VC Directory Mode
@cindex VC Directory buffer
The @dfn{VC Directory buffer} is a specialized buffer for viewing
the version control statuses of the files in a directory tree, and
performing version control operations on those files. In particular,
it is used to specify multi-file VC filesets for commands like
@w{@kbd{C-x v v}} to act on (@pxref{VC Directory Commands}).
@kindex C-x v d
@findex vc-dir
When you are working on a large program, it is often useful to find
out which files have changed within an entire directory tree, or to
view the status of all files under version control at once, and to
perform version control operations on collections of files. You can
use the command @kbd{C-x v d} (@code{vc-dir}) to make a directory
listing that includes only files relevant for version control. This
creates a @dfn{VC Directory buffer} and displays it in a separate
window.
To use the VC Directory buffer, type @kbd{C-x v d} (@code{vc-dir}).
This reads a directory name using the minibuffer, and switches to a VC
Directory buffer for that directory. By default, the buffer is named
@samp{*vc-dir*}. Its contents are described
@iftex
below.
@end iftex
@ifnottex
in @ref{VC Directory Buffer}.
@end ifnottex
The @code{vc-dir} command automatically detects the version control
system to be used in the specified directory. In the event that more
than one system is being used in the directory, you should invoke the
command with a prefix argument, @kbd{C-u C-x v d}; this prompts for
the version control system which the VC Directory buffer should use.
@ifnottex
@cindex PCL-CVS
@pindex cvs
@cindex CVS directory mode
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}.
In addition to the VC Directory buffer, Emacs has a similar facility
called PCL-CVS which is specialized for CVS. @xref{Top, , About
PCL-CVS, pcl-cvs, PCL-CVS --- The Emacs Front-End to CVS}.
@end ifnottex
@menu
* Buffer: VC Directory Buffer. What the buffer looks like and means.
@ -1070,152 +1084,188 @@ Emacs Front-End to CVS}.
@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
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.
and their version control statuses. It lists files in the current
directory (the one specified when you called @kbd{C-x v d}) and its
subdirectories, but only those with a ``noteworthy'' status. Files
that are up-to-date (i.e.@: the same as in the repository) are
omitted. If all the files in a subdirectory are up-to-date, the
subdirectory is not listed either. As an exception, if a file has
become up-to-date as a direct result of a VC command, it is listed.
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
@code{vc-dir} with a prefix argument: @kbd{C-u C-x v d}.
The line for an individual file shows the version control state of
the file. Under RCS and SCCS, the name of the user locking the file
is shown; under CVS, an abbreviated version of the @samp{cvs status}
output is used. Here is an example using CVS:
Here is an example of a VC Directory buffer listing:
@smallexample
@group
./
modified file1.c
needs-update file2.c
needs-merge file3.c
./
edited configure.ac
* added README
unregistered temp.txt
src/
* edited src/main.c
@end group
@end smallexample
@noindent
In this example, @samp{file1.c} is modified with respect to the
repository, and @samp{file2.c} is not. @samp{file3.c} is modified,
but other changes have also been committed---you need to merge them
with the work file before you can check it in.
Two work files have been modified but not committed:
@file{configure.ac} in the current directory, and @file{foo.c} in the
@file{src/} subdirectory. The file named @file{README} has been added
but is not yet committed, while @file{temp.txt} is not under version
control (@pxref{Registering}).
@vindex vc-stay-local
@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 @code{nil}
The @samp{*} characters next to the entries for @file{README} and
@file{src/main.c} indicate that the user has marked out these files as
the current VC fileset
@iftex
(@pxref{CVS Options,,,emacs-xtra, Specialized Emacs Features}).
(see below).
@end iftex
@ifnottex
(@pxref{CVS Options}).
(@pxref{VC Directory Commands}).
@end ifnottex
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
in the ``merge'' state; you would learn that only when you try to
commit your modified copy of the file, or use a command such as
@kbd{C-x v m}.
In practice, this is not a problem because CVS handles this case
consistently whenever it arises. In VC, you'll simply get prompted to
merge the remote changes into your work file first. The benefits of
less network communication usually outweigh the disadvantage of not
seeing remote changes immediately.
The above example is typical for a decentralized version control
system like Bazaar, Git, or Mercurial. Other systems can show other
statuses. For instance, CVS shows the @samp{needs-update} status if
the repository has changes that have not been applied to the work
file. RCS and SCCS show the name of the user locking a file as its
status.
@ifnottex
@vindex vc-stay-local
@vindex vc-cvs-stay-local
On CVS and Subversion, the @code{vc-dir} command normally contacts
the repository, which may be on a remote machine, to check for
updates. If you change the variable @code{vc-stay-local} or
@code{vc-cvs-stay-local} (for CVS) to @code{nil} (@pxref{CVS
Options}), then Emacs avoids contacting a remote repository when
generating the VC Directory buffer (it will still contact it when
necessary, e.g.@: when doing a commit). This may be desirable if you
are working offline or the network is slow.
@end ifnottex
@vindex vc-directory-exclusion-list
When a VC directory displays subdirectories it omits some that
should never contain any files under version control. By default,
this includes Version Control subdirectories such as @samp{RCS} and
@samp{CVS}; you can customize this by setting the variable
@code{vc-directory-exclusion-list}.
The VC Directory buffer omits subdirectories listed in the variable
@code{vc-directory-exclusion-list}. The default value of this
variable contains directories that are used internally by version
control systems.
@node VC Directory Commands
@subsubsection VC Directory Commands
VC Directory mode has a full set of navigation and marking commands
for picking out filesets. Some of these are also available in a
context menu invoked by @kbd{mouse-2}.
Emacs provides several commands for navigating the VC Directory
buffer, and for ``marking'' files as belonging to the current VC
fileset.
Up- and down-arrow keys move in the buffer; @kbd{n} and @kbd{p} also
move vertically as in other list-browsing modes. @key{SPC} and
@key{TAB} behave like down-arrow, and @key{BackTab} behaves like
up-arrow.
@table @kbd
@item n
@itemx @key{SPC}
Move point to the next entry (@code{vc-dir-next-line}).
Both @kbd{C-m} and @kbd{f} visit the file on the current
line. @kbd{o} visits that file in another window. @kbd{q} dismisses
the directory buffer.
@item p
Move point to the previous entry (@code{vc-dir-previous-line}).
@kbd{x} hides up-to-date files.
@item @key{TAB}
Move to the next directory entry (@code{vc-dir-next-directory}).
@kbd{m} marks the file or directory on the current line. If the
region is active, @kbd{m} marks all the files in the region. There
are some restrictions when marking: a file cannot be marked if any of
its parent directories are marked, and a directory cannot be marked if
any files in it or in its child directories are marked.
@item S-@key{TAB}
Move to the previous directory entry
(@code{vc-dir-previous-directory}).
@kbd{M} marks all the files with the same VC state as the current
file if the cursor is on a file. If the cursor is on a directory, it
marks all child files. With a prefix argument: marks all files and
directories.
@item @key{RET}
@itemx f
Visit the file or directory listed on the current line
(@code{vc-dir-find-file}).
@kbd{u} unmarks the file or directory on the current line. If the
region is active, it unmarks all the files in the region.
@item o
Visit the file or directory on the current line, in a separate window
(@code{vc-dir-find-file-other-window}).
@kbd{U} marks all the files with the same VC state as the current file
if the cursor is on a file. If the cursor is on a directory, it
unmarks all child files. With a prefix argument: unmarks all marked
@item m
Mark the file or directory on the current line (@code{vc-dir-mark}),
putting it in the current VC fileset. If the region is active, mark
all files in the region.
A file cannot be marked with this command if it is already in a marked
directory, or one of its subdirectories. Similarly, a directory
cannot be marked with this command if any file in its tree is marked.
@item M
If point is on a file entry, mark all files with the same status; if
point is on a directory entry, mark all files in that directory tree
(@code{vc-dir-mark-all-files}). With a prefix argument, mark all
listed files and directories.
@item u
Unmark the file or directory on the current line. If the region is
active, unmark all the files in the region (@code{vc-dir-unmark}).
@item U
If point is on a file entry, umark all files with the same status; if
point is on a directory entry, unmark all files in that directory tree
(@code{vc-dir-unmark-all-files}). With a prefix argument, unmark all
files and directories.
It is possible to do search, search and replace, incremental search,
and incremental regexp search on multiple files. These commands will
work on all the marked files or the current file if nothing is marked.
If a directory is marked, the files in that directory shown in the VC
directory buffer will be used.
@item x
Hide files with @samp{up-to-date} status
(@code{vc-dir-hide-up-to-date}).
@kbd{S} searches the marked files.
@item q
Quit the VC Directory buffer, and bury it (@code{quit-window}).
@end table
@kbd{Q} does a query replace on the marked files.
@findex vc-dir-mark
@findex vc-dir-mark-all-files
While in the VC Directory buffer, all the files that you mark with
@kbd{m} (@code{vc-dir-mark}) or @kbd{M} (@code{vc-dir-mark}) are in
the current VC fileset. If you mark a directory entry with @kbd{m},
all the listed files in that directory tree are in the current VC
fileset. The files and directories that belong to the current VC
fileset are indicated with a @samp{*} character in the VC Directory
buffer, next to their VC status. In this way, you can set up a
multi-file VC fileset to be acted on by VC commands like @w{@kbd{C-x v
v}} (@pxref{Basic VC Editing}), @w{@kbd{C-x v =}} (@pxref{Old
Revisions}), and @w{@kbd{C-x v u}} (@pxref{VC Undo}).
@kbd{M-s a C-s} does an incremental search on the marked files.
The VC Directory buffer also defines some single-key shortcuts for
VC commands with the @kbd{C-x v} prefix: @kbd{=}, @kbd{+}, @kbd{l},
@kbd{i}, and @kbd{v}.
@kbd{M-s a C-M-s} does an incremental regular expression search
on the marked files.
For example, you can commit a set of edited files by opening a VC
Directory buffer, where the files are listed with the @samp{edited}
status; marking the files; and typing @kbd{v} or @kbd{C-x v v}
(@code{vc-next-action}). If the version control system is
changeset-based, Emacs will commit the files in a single revision.
While in the VC Directory buffer, you can also perform search and
replace on the current VC fileset, with the following commands:
@table @kbd
@item S
Search the fileset (@code{vc-dir-search}).
@item Q
Do a regular expression query replace on the fileset
(@code{vc-dir-query-replace-regexp}).
@item M-s a C-s
Do an incremental search on the fileset (@code{vc-dir-isearch}).
@item M-s a C-M-s
Do an incremental regular expression search on the fileset
(@code{vc-dir-isearch-regexp}).
@end table
@noindent
Apart from acting on multiple files, these commands behave much like
their single-buffer counterparts (@pxref{Search}).
@cindex stashes in version control
@cindex shelves in version control
Commands are also accessible from the VC-dir menu. Note that some
VC backends use the VC-dir menu to make available extra,
backend-specific, commands. For example, Git and Bazaar allow you to
manipulate @dfn{stashes} and @dfn{shelves}. (These provide a
mechanism to temporarily store uncommitted changes somewhere out of
the way, and bring them back at a later time.)
Normal VC commands with the @kbd{C-x v} prefix work in VC directory
buffers. Some single-key shortcuts are available as well; @kbd{=},
@kbd{+}, @kbd{l}, @kbd{i}, and @kbd{v} behave as through prefixed with
@kbd{C-x v}.
The command @kbd{C-x v v} (@code{vc-next-action}) operates on all
the marked files, so that you can commit several files at once. If
the underlying VC supports atomic commits of multiple-file 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 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
single log entry and uses it for the changeset as a whole. If the
underling VCS is file- rather than changeset-oriented, the log entry
will be replicated into the history of each file.
The above commands are also available via the menu bar, and via a
context menu invoked by @kbd{Mouse-2}. Furthermore, some VC backends
use the menu to provide extra backend-specific commands. For example,
Git and Bazaar allow you to manipulate @dfn{stashes} and @dfn{shelves}
(where are a way to temporarily put aside uncommitted changes, and
bring them back at a later time).
@node Branches
@subsection Multiple Branches of a File

View file

@ -849,6 +849,7 @@ the user for specifics, e.g. a merge source.
**** Currently supported for Bzr, Git, and Mercurial.
+++
*** New option `vc-revert-show-diff' controls whether `vc-revert'
shows a diff while querying the user. It defaults to t.