Nuke arch-tags.
[emacs.git] / doc / emacs / vc1-xtra.texi
blob0ea5b2472829ebfc9d5ec5f614ed05a8c9791734
1 @c This is part of the Emacs manual.
2 @c Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
3 @c   Free Software Foundation, Inc.
4 @c See file emacs.texi for copying conditions.
5 @c
6 @c This file is included either in vc-xtra.texi (when producing the
7 @c printed version) or in the main Emacs manual (for the on-line version).
9 @node Remote Repositories
10 @subsection Remote Repositories
11 @cindex remote repositories
13   A common way of using CVS and other more advanced VCSes is to set up
14 a central repository on some Internet host, then have each
15 developer check out a personal working copy of the files on his local
16 machine.  Committing changes to the repository, and picking up changes
17 from other users into one's own working area, then works by direct
18 interactions with the repository server.
20   One difficulty is that access to a repository server is often slow,
21 and that developers might need to work off-line as well.  While only
22 third-generation decentralized VCses such as GNU Arch or Mercurial
23 really solve this problem, VC is designed to reduce the amount of
24 network interaction necessary.
26   If you are using a truly decentralized VCS you can skip the rest of
27 this section. It describes backup and local-repository techniques
28 that are only useful for Subversion and earlier VCSes.
30 @menu
31 * Version Backups::        Keeping local copies of repository versions.
32 * Local Version Control::  Using another version system for local editing.
33 @end menu
35 @node Version Backups
36 @subsubsection Version Backups
37 @cindex version backups
39 @cindex automatic version backups
40   When VC sees that the repository for a file is on a remote
41 machine, it automatically makes local backups of unmodified versions
42 of the file---@dfn{automatic version backups}.  This means that you
43 can compare the file to the repository version (@kbd{C-x v =}), or
44 revert to that version (@kbd{C-x v u}), without any network
45 interactions.
47   The local copy of the unmodified file is called a @dfn{version
48 backup} to indicate that it corresponds exactly to a version that is
49 stored in the repository.  Note that version backups are not the same
50 as ordinary Emacs backup files
51 @iftex
52 (@pxref{Backup,,,emacs, the Emacs Manual}).
53 @end iftex
54 @ifnottex
55 (@pxref{Backup}).
56 @end ifnottex
57 But they follow a similar naming convention.
59   For a file that comes from a remote repository, VC makes a
60 version backup whenever you save the first changes to the file, and
61 removes it after you have committed your modified version to the
62 repository. You can disable the making of automatic version backups by
63 setting @code{vc-cvs-stay-local} to @code{nil} (@pxref{CVS Options}).
65 @cindex manual version backups
66   The name of the automatic version backup for version @var{version}
67 of file @var{file} is @code{@var{file}.~@var{version}.~}.  This is
68 almost the same as the name used by @kbd{C-x v ~}
69 @iftex
70 (@pxref{Old Revisions,,,emacs, the Emacs Manual}),
71 @end iftex
72 @ifnottex
73 (@pxref{Old Revisions}),
74 @end ifnottex
75 the only difference being the additional dot (@samp{.})  after the
76 version number.  This similarity is intentional, because both kinds of
77 files store the same kind of information.  The file made by @kbd{C-x v
78 ~} acts as a @dfn{manual version backup}.
80   All the VC commands that operate on old versions of a file can use
81 both kinds of version backups.  For instance, @kbd{C-x v ~} uses
82 either an automatic or a manual version backup, if possible, to get
83 the contents of the version you request.  Likewise, @kbd{C-x v =} and
84 @kbd{C-x v u} use either an automatic or a manual version backup, if
85 one of them exists, to get the contents of a version to compare or
86 revert to.  If you changed a file outside of Emacs, so that no
87 automatic version backup was created for the previous text, you can
88 create a manual backup of that version using @kbd{C-x v ~}, and thus
89 obtain the benefit of the local copy for Emacs commands.
91   The only difference in Emacs's handling of manual and automatic
92 version backups, once they exist, is that Emacs deletes automatic
93 version backups when you commit to the repository.  By contrast,
94 manual version backups remain until you delete them.
96 @node Local Version Control
97 @subsubsection Local Version Control
98 @cindex local version control
99 @cindex local back end (version control)
101 When you make many changes to a file that comes from a remote
102 repository, it can be convenient to have version control on your local
103 machine as well.  You can then record intermediate versions, revert to
104 a previous state, etc., before you actually commit your changes to the
105 remote server.
107 VC lets you do this by putting a file under a second, local version
108 control system, so that the file is effectively registered in two
109 systems at the same time.  For the description here, we will assume
110 that the remote system is CVS, and you use RCS locally, although the
111 mechanism works with any combination of version control systems
112 (@dfn{back ends}).
114 To make it work with other back ends, you must make sure that the
115 ``more local'' back end comes before the ``more remote'' back end in
116 the setting of @code{vc-handled-backends} (@pxref{Customizing VC}).  By
117 default, this variable is set up so that you can use remote CVS and
118 local RCS as described here.
120 To start using local RCS for a file that comes from a remote CVS
121 server, you must @emph{register the file in RCS}, by typing @kbd{C-u
122 C-x v v rcs @key{RET}}.  (In other words, use @code{vc-next-action} with a
123 prefix argument, and specify RCS as the back end.)
125 You can do this at any time; it does not matter whether you have
126 already modified the file with respect to the version in the CVS
127 repository.  If possible, VC tries to make the RCS master start with
128 the unmodified repository version, then checks in any local changes
129 as a new version.  This works if you have not made any changes yet, or
130 if the unmodified repository version exists locally as a version
131 backup (@pxref{Version Backups}).  If the unmodified version is not
132 available locally, the RCS master starts with the modified version;
133 the only drawback to this is that you cannot compare your changes
134 locally to what is stored in the repository.
136 The version number of the RCS master is derived from the current CVS
137 version, starting a branch from it.  For example, if the current CVS
138 version is 1.23, the local RCS branch will be 1.23.1.  Version 1.23 in
139 the RCS master will be identical to version 1.23 under CVS; your first
140 changes are checked in as 1.23.1.1.  (If the unmodified file is not
141 available locally, VC will check in the modified file twice, both as
142 1.23 and 1.23.1.1, to make the revision numbers consistent.)
144 If you do not use locking under CVS (the default), locking is also
145 disabled for RCS, so that editing under RCS works exactly as under
146 CVS.
148 When you are done with local editing, you can commit the final version
149 back to the CVS repository by typing @kbd{C-u C-x v v cvs @key{RET}}.
150 This initializes the log entry buffer
151 @iftex
152 (@pxref{Log Buffer,,,emacs, the Emacs Manual})
153 @end iftex
154 @ifnottex
155 (@pxref{Log Buffer})
156 @end ifnottex
157 to contain all the log entries you have recorded in the RCS master;
158 you can edit them as you wish, and then commit in CVS by typing
159 @kbd{C-c C-c}.  If the commit is successful, VC removes the RCS
160 master, so that the file is once again registered under CVS only.
161 (The RCS master is not actually deleted, just renamed by appending
162 @samp{~} to the name, so that you can refer to it later if you wish.)
164 While using local RCS, you can pick up recent changes from the CVS
165 repository into your local file, or commit some of your changes back
166 to CVS, without terminating local RCS version control.  To do this,
167 switch to the CVS back end temporarily, with the @kbd{C-x v b} command:
169 @table @kbd
170 @item C-x v b
171 Switch to another back end that the current file is registered
172 under (@code{vc-switch-backend}).
174 @item C-u C-x v b @var{backend} @key{RET}
175 Switch to @var{backend} for the current file.
176 @end table
178 @kindex C-x v b
179 @findex vc-switch-backend
180 @kbd{C-x v b} does not change the buffer contents, or any files; it
181 only changes VC's perspective on how to handle the file.  Any
182 subsequent VC commands for that file will operate on the back end that
183 is currently selected.
185 If the current file is registered in more than one back end, typing
186 @kbd{C-x v b} ``cycles'' through all of these back ends.  With a
187 prefix argument, it asks for the back end to use in the minibuffer.
189 Thus, if you are using local RCS, and you want to pick up some recent
190 changes in the file from remote CVS, first visit the file, then type
191 @kbd{C-x v b} to switch to CVS, and finally use @kbd{C-x v m
192 @key{RET}} to merge the news
193 @iftex
194 (@pxref{Merging,,,emacs, the Emacs Manual}).
195 @end iftex
196 @ifnottex
197 (@pxref{Merging}).
198 @end ifnottex
199 You can then switch back to RCS by typing @kbd{C-x v b} again, and
200 continue to edit locally.
202 But if you do this, the revision numbers in the RCS master no longer
203 correspond to those of CVS.  Technically, this is not a problem, but
204 it can become difficult to keep track of what is in the CVS repository
205 and what is not.  So we suggest that you return from time to time to
206 CVS-only operation, by committing your local changes back to the
207 repository using @kbd{C-u C-x v v cvs @key{RET}}.
209 @node Revision Tags
210 @subsection Revision Tags
211 @cindex tags and version control
213   In a VCS with per-file revision numbers (such as SCCS, RCS, or CVS)
214 @dfn{tag} is a named set of file versions (one for each registered
215 file) that you can treat as a unit.  In a VCS with per-repository
216 version numbers (Subversion and most later ones) a tag is simply
217 a symbolic name for a revision.
219    One important kind of tag is a @dfn{release}, a (theoretically)
220 stable version of the system that is ready for distribution to users.
222 @menu
223 * Making Revision Tags::  The tag facilities.
224 * Revision Tag Caveats::  Things to be careful of when using tags.
225 @end menu
227 @node Making Revision Tags
228 @subsubsection Making and Using Revision Tags
230   There are two basic commands for tags; one makes a
231 tag with a given name, the other retrieves a named tag.
233 @table @code
234 @kindex C-x v s
235 @findex vc-create-tag
236 @item C-x v s @var{name} @key{RET}
237 Define the working revision of every registered file in or under the
238 current directory as a tag named @var{name}
239 (@code{vc-create-tag}).
241 @kindex C-x v r
242 @findex vc-retrieve-tag
243 @item C-x v r @var{name} @key{RET}
244 For all registered files at or below the current directory level,
245 retrieve the tagged revision @var{name}. This command will 
246 switch to a branch if @var{name} is a branch name and your VCS
247 distinguishes branches from tags. 
248 (@code{vc-retrieve-tag}).
250 This command reports an error if any files are locked at or below the
251 current directory, without changing anything; this is to avoid
252 overwriting work in progress.
253 @end table
255 Tags are inexpensive, so you need not hesitate to create them whenever
256 they are useful.  Branches vary in cost depending on your VCS; in
257 older ones they may be expensive.
259   You can give a tag or branch name as an argument to @kbd{C-x v =} or
260 @kbd{C-x v ~}
261 @iftex
262 (@pxref{Old Revisions,,,emacs, the Emacs Manual}).
263 @end iftex
264 @ifnottex
265 (@pxref{Old Revisions}).
266 @end ifnottex
267 Thus, you can use it to compare a tagged version against the current files,
268 or two tagged versions against each other.
270 @node Revision Tag Caveats
271 @subsubsection Revision Tag Caveats
273   For SCCS, VC implements tags itself; these tags are visible only
274 through VC.  Most later systems (including CVS, Subversion, bzr, git,
275 and hg) have a native tag facility, and VC uses it where
276 available; those tags will be visible even when you bypass VC.
278   There is no support for VC tags using GNU Arch yet.
280   Under older VCSes (SCCS, RCS, CVS, early versions of Subversion),
281 renaming and deletion could create some difficulties with tags.  This is
282 not a VC-specific problem, but a general design issue in version
283 control systems that was not solved effectively until the earliest
284 third-generation systems.
286   In a file-oriented VCS, when you rename a registered file you need
287 to rename its master along with it; the command @code{vc-rename-file}
288 will do this automatically.  If you are using SCCS, you must also
289 update the records of the tag, to mention the file by its new name
290 (@code{vc-rename-file} does this, too).  An old tag that refers to a
291 master file that no longer exists under the recorded name is invalid;
292 VC can no longer retrieve it.  It would be beyond the scope of this
293 manual to explain enough about RCS and SCCS to explain how to update
294 the tags by hand.
296   Using @code{vc-rename-file} makes the tag remain valid for
297 retrieval, but it does not solve all problems.  For example, some of the
298 files in your program probably refer to others by name.  At the very
299 least, the makefile probably mentions the file that you renamed.  If you
300 retrieve an old tag, the renamed file is retrieved under its new
301 name, which is not the name that the makefile expects.  So the program
302 won't really work as retrieved.
304 @node Miscellaneous VC
305 @subsection Miscellaneous Commands and Features of VC
307   This section explains the less-frequently-used features of VC.
309 @menu
310 * Change Logs and VC::  Generating a change log file from log entries.
311 * Renaming and VC::     A command to rename both the source and master
312                           file correctly.
313 * Version Headers::     Inserting version control headers into working files.
314 @end menu
316 @node Change Logs and VC
317 @subsubsection Change Logs and VC
319   If you use RCS or CVS for a program and also maintain a change log
320 file for it
321 @iftex
322 (@pxref{Change Log,,,emacs, the Emacs Manual}),
323 @end iftex
324 @ifnottex
325 (@pxref{Change Log}),
326 @end ifnottex
327 you can generate change log entries automatically from the version
328 control log entries:
330 @table @kbd
331 @item C-x v a
332 @kindex C-x v a
333 @findex vc-update-change-log
334 Visit the current directory's change log file and, for registered files
335 in that directory, create new entries for versions checked in since the
336 most recent entry in the change log file.
337 (@code{vc-update-change-log}).
339 This command works with RCS or CVS only, not with any of the other
340 back ends.
342 @item C-u C-x v a
343 As above, but only find entries for the current buffer's file.
345 @item M-1 C-x v a
346 As above, but find entries for all the currently visited files that are
347 maintained with version control.  This works only with RCS, and it puts
348 all entries in the log for the default directory, which may not be
349 appropriate.
350 @end table
352   For example, suppose the first line of @file{ChangeLog} is dated
353 1999-04-10, and that the only check-in since then was by Nathaniel
354 Bowditch to @file{rcs2log} on 1999-05-22 with log text @samp{Ignore log
355 messages that start with `#'.}.  Then @kbd{C-x v a} visits
356 @file{ChangeLog} and inserts text like this:
358 @iftex
359 @medbreak
360 @end iftex
361 @smallexample
362 @group
363 1999-05-22  Nathaniel Bowditch  <nat@@apn.org>
365         * rcs2log: Ignore log messages that start with `#'.
366 @end group
367 @end smallexample
368 @iftex
369 @medbreak
370 @end iftex
372 @noindent
373 You can then edit the new change log entry further as you wish.
375   Some of the new change log entries may duplicate what's already in
376 ChangeLog.  You will have to remove these duplicates by hand.
378   Normally, the log entry for file @file{foo} is displayed as @samp{*
379 foo: @var{text of log entry}}.  The @samp{:} after @file{foo} is omitted
380 if the text of the log entry starts with @w{@samp{(@var{functionname}):
381 }}.  For example, if the log entry for @file{vc.el} is
382 @samp{(vc-do-command): Check call-process status.}, then the text in
383 @file{ChangeLog} looks like this:
385 @iftex
386 @medbreak
387 @end iftex
388 @smallexample
389 @group
390 1999-05-06  Nathaniel Bowditch  <nat@@apn.org>
392         * vc.el (vc-do-command): Check call-process status.
393 @end group
394 @end smallexample
395 @iftex
396 @medbreak
397 @end iftex
399   When @kbd{C-x v a} adds several change log entries at once, it groups
400 related log entries together if they all are checked in by the same
401 author at nearly the same time.  If the log entries for several such
402 files all have the same text, it coalesces them into a single entry.
403 For example, suppose the most recent check-ins have the following log
404 entries:
406 @flushleft
407 @bullet{} For @file{vc.texinfo}: @samp{Fix expansion typos.}
408 @bullet{} For @file{vc.el}: @samp{Don't call expand-file-name.}
409 @bullet{} For @file{vc-hooks.el}: @samp{Don't call expand-file-name.}
410 @end flushleft
412 @noindent
413 They appear like this in @file{ChangeLog}:
415 @iftex
416 @medbreak
417 @end iftex
418 @smallexample
419 @group
420 1999-04-01  Nathaniel Bowditch  <nat@@apn.org>
422         * vc.texinfo: Fix expansion typos.
424         * vc.el, vc-hooks.el: Don't call expand-file-name.
425 @end group
426 @end smallexample
427 @iftex
428 @medbreak
429 @end iftex
431   Normally, @kbd{C-x v a} separates log entries by a blank line, but you
432 can mark several related log entries to be clumped together (without an
433 intervening blank line) by starting the text of each related log entry
434 with a label of the form @w{@samp{@{@var{clumpname}@} }}.  The label
435 itself is not copied to @file{ChangeLog}.  For example, suppose the log
436 entries are:
438 @flushleft
439 @bullet{} For @file{vc.texinfo}: @samp{@{expand@} Fix expansion typos.}
440 @bullet{} For @file{vc.el}: @samp{@{expand@} Don't call expand-file-name.}
441 @bullet{} For @file{vc-hooks.el}: @samp{@{expand@} Don't call expand-file-name.}
442 @end flushleft
444 @noindent
445 Then the text in @file{ChangeLog} looks like this:
447 @iftex
448 @medbreak
449 @end iftex
450 @smallexample
451 @group
452 1999-04-01  Nathaniel Bowditch  <nat@@apn.org>
454         * vc.texinfo: Fix expansion typos.
455         * vc.el, vc-hooks.el: Don't call expand-file-name.
456 @end group
457 @end smallexample
458 @iftex
459 @medbreak
460 @end iftex
462   A log entry whose text begins with @samp{#} is not copied to
463 @file{ChangeLog}.  For example, if you merely fix some misspellings in
464 comments, you can log the change with an entry beginning with @samp{#}
465 to avoid putting such trivia into @file{ChangeLog}.
467 @node Renaming and VC
468 @subsubsection Renaming VC Work Files and Master Files
470 @findex vc-rename-file
471   When you rename a registered file, you must also rename its master
472 file correspondingly to get proper results.  Use @code{vc-rename-file}
473 to rename the source file as you specify, and rename its master file
474 accordingly.  It also updates any tags (@pxref{Revision Tags}) that
475 mention the file, so that they use the new name; despite this, the
476 tag thus modified may not completely work (@pxref{Revision Tag Caveats}).
478   Some back ends do not provide an explicit rename operation to their
479 repositories.  After issuing @code{vc-rename-file}, use @kbd{C-x v v}
480 on the original and renamed buffers and provide the necessary edit
481 log.
483   You cannot use @code{vc-rename-file} on a file that is locked by
484 someone else.
486 @node Version Headers
487 @subsubsection Inserting Version Control Headers
489    Sometimes it is convenient to put version identification strings
490 directly into working files.  Certain special strings called
491 @dfn{version headers} are replaced in each successive version by the
492 number of that version, the name of the user who created it, and other
493 relevant information.  All of the back ends that VC supports have such
494 a mechanism, except GNU Arch.
496   VC does not normally use the information contained in these headers.
497 The exception is RCS---with RCS, version headers are sometimes more
498 reliable than the master file to determine which version of the file
499 you are editing.  Note that in a multi-branch environment, version
500 headers are necessary to make VC behave correctly
501 @iftex
502 (@pxref{Multi-User Branching,,,emacs, the Emacs Manual}).
503 @end iftex
504 @ifnottex
505 (@pxref{Multi-User Branching}).
506 @end ifnottex
508   Searching for RCS version headers is controlled by the variable
509 @code{vc-consult-headers}.  If it is non-@code{nil} (the default),
510 Emacs searches for headers to determine the version number you are
511 editing.  Setting it to @code{nil} disables this feature.
513   Note that although CVS uses the same kind of version headers as RCS
514 does, VC never searches for these headers if you are using CVS,
515 regardless of the above setting.
517 @kindex C-x v h
518 @findex vc-insert-headers
519   You can use the @kbd{C-x v h} command (@code{vc-insert-headers}) to
520 insert a suitable header string.
522 @table @kbd
523 @item C-x v h
524 Insert headers in a file for use with your version-control system.
525 @end table
527 @vindex vc-@var{backend}-header
528   The default header string is @samp{@w{$}Id$} for RCS and
529 @samp{@w{%}W%} for SCCS.  You can specify other headers to insert by
530 setting the variables @code{vc-@var{backend}-header} where
531 @var{backend} is @code{rcs} or @code{sccs}.
533   Instead of a single string, you can specify a list of strings; then
534 each string in the list is inserted as a separate header on a line of
535 its own.
537   It may be necessary to use apparently-superfluous backslashes when
538 writing the strings that you put in this variable.  For instance, you
539 might write @code{"$Id\$"} rather than @code{"$Id@w{$}"}.  The extra
540 backslash prevents the string constant from being interpreted as a
541 header, if the Emacs Lisp file containing it is maintained with
542 version control.
544 @vindex vc-comment-alist
545   Each header is inserted surrounded by tabs, inside comment delimiters,
546 on a new line at point.  Normally the ordinary comment
547 start and comment end strings of the current mode are used, but for
548 certain modes, there are special comment delimiters for this purpose;
549 the variable @code{vc-comment-alist} specifies them.  Each element of
550 this list has the form @code{(@var{mode} @var{starter} @var{ender})}.
552 @vindex vc-static-header-alist
553   The variable @code{vc-static-header-alist} specifies further strings
554 to add based on the name of the buffer.  Its value should be a list of
555 elements of the form @code{(@var{regexp} . @var{format})}.  Whenever
556 @var{regexp} matches the buffer name, @var{format} is inserted as part
557 of the header.  A header line is inserted for each element that matches
558 the buffer name, and for each string specified by
559 @code{vc-@var{backend}-header}.  The header line is made by processing the
560 string from @code{vc-@var{backend}-header} with the format taken from the
561 element.  The default value for @code{vc-static-header-alist} is as follows:
563 @example
564 @group
565 (("\\.c$" .
566   "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\
567 #endif /* lint */\n"))
568 @end group
569 @end example
571 @noindent
572 It specifies insertion of text of this form:
574 @example
575 @group
577 #ifndef lint
578 static char vcid[] = "@var{string}";
579 #endif /* lint */
580 @end group
581 @end example
583 @noindent
584 Note that the text above starts with a blank line.
586   If you use more than one version header in a file, put them close
587 together in the file.  The mechanism in @code{revert-buffer} that
588 preserves markers may not handle markers positioned between two version
589 headers.
591 @node Customizing VC
592 @subsection Customizing VC
594 @vindex vc-handled-backends
595 The variable @code{vc-handled-backends} determines which version
596 control systems VC should handle.  The default value is @code{(RCS CVS
597 SVN SCCS Bzr Git Hg Mtn Arch)}, so it contains all the version systems
598 that are currently supported.  If you want VC to ignore one or more of
599 these systems, exclude its name from the list.  To disable VC entirely,
600 set this variable to @code{nil}.
602 The order of systems in the list is significant: when you visit a file
603 registered in more than one system (@pxref{Local Version Control}), VC
604 uses the system that comes first in @code{vc-handled-backends} by
605 default.  The order is also significant when you register a file for
606 the first time, see
607 @iftex
608 @ref{Registering,,,emacs, the Emacs Manual},
609 @end iftex
610 @ifnottex
611 @ref{Registering},
612 @end ifnottex
613 for details.
615 @menu
616 * General VC Options::  Options that apply to multiple back ends.
617 * RCS and SCCS::        Options for RCS and SCCS.
618 * CVS Options::         Options for CVS.
619 @end menu
621 @node General VC Options
622 @subsubsection General Options
624 @vindex vc-make-backup-files
625   Emacs normally does not save backup files for source files that are
626 maintained with version control.  If you want to make backup files even
627 for files that use version control, set the variable
628 @code{vc-make-backup-files} to a non-@code{nil} value.
630 @vindex vc-keep-workfiles
631   Normally the work file exists all the time, whether it is locked or
632 not.  If you set @code{vc-keep-workfiles} to @code{nil}, then checking
633 in a new version with @kbd{C-x v v} deletes the work file; but any
634 attempt to visit the file with Emacs creates it again.  (With CVS, work
635 files are always kept.)
637 @vindex vc-follow-symlinks
638   Editing a version-controlled file through a symbolic link can be
639 dangerous.  It bypasses the version control system---you can edit the
640 file without locking it, and fail to check your changes in.  Also,
641 your changes might overwrite those of another user.  To protect against
642 this, VC checks each symbolic link that you visit, to see if it points
643 to a file under version control.
645   The variable @code{vc-follow-symlinks} controls what to do when a
646 symbolic link points to a version-controlled file.  If it is @code{nil},
647 VC only displays a warning message.  If it is @code{t}, VC automatically
648 follows the link, and visits the real file instead, telling you about
649 this in the echo area.  If the value is @code{ask} (the default), VC
650 asks you each time whether to follow the link.
652 @vindex vc-suppress-confirm
653   If @code{vc-suppress-confirm} is non-@code{nil}, then @kbd{C-x v v}
654 and @kbd{C-x v i} can save the current buffer without asking, and
655 @kbd{C-x v u} also operates without asking for confirmation.  (This
656 variable does not affect @kbd{C-x v c}; that operation is so drastic
657 that it should always ask for confirmation.)
659 @vindex vc-command-messages
660   VC mode does much of its work by running the shell commands for the
661 appropriate backend.  If @code{vc-command-messages} is non-@code{nil}, VC
662 displays messages to indicate which shell commands it runs, and
663 additional messages when the commands finish.
665 @vindex vc-path
666   You can specify additional directories to search for version control
667 programs by setting the variable @code{vc-path}.  These directories
668 are searched before the usual search path.  It is rarely necessary to
669 set this variable, because VC normally finds the proper files
670 automatically.
672 @node RCS and SCCS
673 @subsubsection Options for RCS and SCCS
675 @cindex non-strict locking (RCS)
676 @cindex locking, non-strict (RCS)
677   By default, RCS uses locking to coordinate the activities of several
678 users, but there is a mode called @dfn{non-strict locking} in which
679 you can check-in changes without locking the file first.  Use
680 @samp{rcs -U} to switch to non-strict locking for a particular file,
681 see the @code{rcs} manual page for details.
683   When deducing the version control state of an RCS file, VC first
684 looks for an RCS version header string in the file (@pxref{Version
685 Headers}).  If there is no header string, VC normally looks at the
686 file permissions of the work file; this is fast.  But there might be
687 situations when the file permissions cannot be trusted.  In this case
688 the master file has to be consulted, which is rather expensive.  Also
689 the master file can only tell you @emph{if} there's any lock on the
690 file, but not whether your work file really contains that locked
691 version.
693 @vindex vc-consult-headers
694   You can tell VC not to use version headers to determine the file
695 status by setting @code{vc-consult-headers} to @code{nil}.  VC then
696 always uses the file permissions (if it is supposed to trust them), or
697 else checks the master file.
699 @vindex vc-mistrust-permissions
700   You can specify the criterion for whether to trust the file
701 permissions by setting the variable @code{vc-mistrust-permissions}.
702 Its value can be @code{t} (always mistrust the file permissions and
703 check the master file), @code{nil} (always trust the file
704 permissions), or a function of one argument which makes the decision.
705 The argument is the directory name of the @file{RCS} subdirectory.  A
706 non-@code{nil} value from the function says to mistrust the file
707 permissions.  If you find that the file permissions of work files are
708 changed erroneously, set @code{vc-mistrust-permissions} to @code{t}.
709 Then VC always checks the master file to determine the file's status.
711   VC determines the version control state of files under SCCS much as
712 with RCS.  It does not consider SCCS version headers, though.  Thus,
713 the variable @code{vc-mistrust-permissions} affects SCCS use, but
714 @code{vc-consult-headers} does not.
716 @node CVS Options
717 @subsubsection Options specific for CVS
719 @cindex locking (CVS)
720   By default, CVS does not use locking to coordinate the activities of
721 several users; anyone can change a work file at any time.  However,
722 there are ways to restrict this, resulting in behavior that resembles
723 locking.
725 @cindex CVSREAD environment variable (CVS)
726   For one thing, you can set the @env{CVSREAD} environment variable
727 (the value you use makes no difference).  If this variable is defined,
728 CVS makes your work files read-only by default.  In Emacs, you must
729 type @kbd{C-x v v} to make the file writable, so that editing works
730 in fact similar as if locking was used.  Note however, that no actual
731 locking is performed, so several users can make their files writable
732 at the same time.  When setting @env{CVSREAD} for the first time, make
733 sure to check out all your modules anew, so that the file protections
734 are set correctly.
736 @cindex cvs watch feature
737 @cindex watching files (CVS)
738   Another way to achieve something similar to locking is to use the
739 @dfn{watch} feature of CVS.  If a file is being watched, CVS makes it
740 read-only by default, and you must also use @kbd{C-x v v} in Emacs to
741 make it writable.  VC calls @code{cvs edit} to make the file writable,
742 and CVS takes care to notify other developers of the fact that you
743 intend to change the file.  See the CVS documentation for details on
744 using the watch feature.
746 @vindex vc-stay-local
747 @vindex vc-cvs-stay-local
748 @cindex remote repositories (CVS)
749   When a file's repository is on a remote machine, VC tries to keep
750 network interactions to a minimum.  This is controlled by the variable
751 @code{vc-cvs-stay-local}.  There is another variable,
752 @code{vc-stay-local}, which enables the feature also for other back
753 ends that support it, including CVS.  In the following, we will talk
754 only about @code{vc-cvs-stay-local}, but everything applies to
755 @code{vc-stay-local} as well.
757 If @code{vc-cvs-stay-local} is @code{t} (the default), then VC uses
758 only the entry in the local CVS subdirectory to determine the file's
759 state (and possibly information returned by previous CVS commands).
760 One consequence of this is that when you have modified a file, and
761 somebody else has already checked in other changes to the file, you
762 are not notified of it until you actually try to commit.  (But you can
763 try to pick up any recent changes from the repository first, using
764 @kbd{C-x v m @key{RET}},
765 @iftex
766 @pxref{Merging,,,emacs, the Emacs Manual}).
767 @end iftex
768 @ifnottex
769 @pxref{Merging}).
770 @end ifnottex
772   When @code{vc-cvs-stay-local} is @code{t}, VC also makes local
773 version backups, so that simple diff and revert operations are
774 completely local (@pxref{Version Backups}).
776   On the other hand, if you set @code{vc-cvs-stay-local} to @code{nil},
777 then VC queries the remote repository @emph{before} it decides what to
778 do in @code{vc-next-action} (@kbd{C-x v v}), just as it does for local
779 repositories.  It also does not make any version backups.
781   You can also set @code{vc-cvs-stay-local} to a regular expression
782 that is matched against the repository host name; VC then stays local
783 only for repositories from hosts that match the pattern.
785 @vindex vc-cvs-global-switches
786   You can specify additional command line options to pass to all CVS
787 operations in the variable @code{vc-cvs-global-switches}.  These
788 switches are inserted immediately after the @code{cvs} command, before
789 the name of the operation to invoke.